From owner-svn-src-user@FreeBSD.ORG Tue Jan 5 12:29:03 2010 Return-Path: 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 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 " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-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 +#ifdef _KERNEL #include #include #include #include +#define log(x, arg...) + +#else /* !_KERNEL */ + +#include +#include +#include +#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