From owner-svn-src-user@FreeBSD.ORG  Tue Jan  5 12:29:03 2010
Return-Path: <owner-svn-src-user@FreeBSD.ORG>
Delivered-To: svn-src-user@freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id AFA2C1065696;
	Tue,  5 Jan 2010 12:29:03 +0000 (UTC)
	(envelope-from luigi@FreeBSD.org)
Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c])
	by mx1.freebsd.org (Postfix) with ESMTP id 853AF8FC18;
	Tue,  5 Jan 2010 12:29:03 +0000 (UTC)
Received: from svn.freebsd.org (localhost [127.0.0.1])
	by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id o05CT3Jx095740;
	Tue, 5 Jan 2010 12:29:03 GMT (envelope-from luigi@svn.freebsd.org)
Received: (from luigi@localhost)
	by svn.freebsd.org (8.14.3/8.14.3/Submit) id o05CT3AN095738;
	Tue, 5 Jan 2010 12:29:03 GMT (envelope-from luigi@svn.freebsd.org)
Message-Id: <201001051229.o05CT3AN095738@svn.freebsd.org>
From: Luigi Rizzo <luigi@FreeBSD.org>
Date: Tue, 5 Jan 2010 12:29:03 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-user@freebsd.org
X-SVN-Group: user
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Cc: 
Subject: svn commit: r201573 - user/luigi/ipfw3-head/sys/netinet/ipfw
X-BeenThere: svn-src-user@freebsd.org
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: "SVN commit messages for the experimental &quot; user&quot;
	src tree" <svn-src-user.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-user>,
	<mailto:svn-src-user-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-user>
List-Post: <mailto:svn-src-user@freebsd.org>
List-Help: <mailto:svn-src-user-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-user>,
	<mailto:svn-src-user-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Tue, 05 Jan 2010 12:29:03 -0000

Author: luigi
Date: Tue Jan  5 12:29:03 2010
New Revision: 201573
URL: http://svn.freebsd.org/changeset/base/201573

Log:
  add testing code (to be run in userland)

Modified:
  user/luigi/ipfw3-head/sys/netinet/ipfw/dn_heap.c

Modified: user/luigi/ipfw3-head/sys/netinet/ipfw/dn_heap.c
==============================================================================
--- user/luigi/ipfw3-head/sys/netinet/ipfw/dn_heap.c	Tue Jan  5 12:03:30 2010	(r201572)
+++ user/luigi/ipfw3-head/sys/netinet/ipfw/dn_heap.c	Tue Jan  5 12:29:03 2010	(r201573)
@@ -32,10 +32,27 @@ __FBSDID("$FreeBSD$");
  */
 
 #include <sys/param.h>
+#ifdef _KERNEL
 #include <sys/systm.h>
 #include <sys/malloc.h>
 #include <sys/kernel.h>
 #include <netinet/ipfw/dn_heap.h>
+#define log(x, arg...)
+
+#else /* !_KERNEL */
+
+#include <stdio.h>
+#include <strings.h>
+#include <stdlib.h>
+#include  "dn_heap.h"
+#define log(x, arg...)	fprintf(stderr, ## arg)
+#define panic(x...)	fprintf(stderr, ## x), exit(1)
+#define MALLOC_DEFINE(a, b, c)
+static void *my_malloc(int s) {	return malloc(s); }
+static void my_free(void *p) {	free(p); }
+#define malloc(s, t, w)	my_malloc(s)
+#define free(p, t)	my_free(p)
+#endif /* !_KERNEL */
 
 MALLOC_DEFINE(M_DN_HEAP, "dummynet", "dummynet heap");
 
@@ -108,6 +125,7 @@ heap_insert(struct dn_heap *h, uint64_t 
 {
 	int son = h->elements;
 
+	//log("%s key %llu p %p\n", __FUNCTION__, key1, p);
 	if (p == NULL)	/* data already there, set starting point */
 		son = key1;
 	else {/* insert new element at the end, possibly resize */
@@ -249,3 +267,32 @@ heap_free(struct dn_heap *h)
 		free(h->p, M_DN_HEAP);
 	bzero(h, sizeof(*h) );
 }
+
+#ifndef _KERNEL
+/*
+ * testing code for the heap
+ */
+int
+main(int argc, char *argv[])
+{
+	struct dn_heap h;
+	int i, n;
+	struct timeval tv;
+	uint64_t k;
+
+	n = (argc > 1) ? atoi(argv[1]) : 0;
+	if (n <= 0 || n > 10000)
+		n = 100;
+	bzero(&h, sizeof(h));
+	gettimeofday(&tv, NULL);
+	srandom(tv.tv_usec);
+	heap_init(&h, 0);
+	for (i=0; i < n; i++)
+		heap_insert(&h, random(), (void *)(100+i));
+	for (i=0; h.elements > 0; i++) {
+		printf("%d key %llu, val %p\n",
+			i, h.p[0].key, h.p[0].object);
+		heap_extract(&h, NULL);
+	}
+}
+#endif