diff -r 5ba7f20a14ca -r 2c84ed52709d yapf/unittest/test_binaryheap.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/yapf/unittest/test_binaryheap.h Sat May 27 16:12:16 2006 +0000 @@ -0,0 +1,103 @@ +/* $Id$ */ + +// this test uses CData structure defined in test_autocopyptr.h + +static int TestBinaryHeap1(bool silent) +{ + CData::NumInstances() = 0; + int res = 0; + { + const int max_items = 10000; + const int total_adds = 1000000; + CBinaryHeapT bh(max_items); + CFixedSizeArrayT data; + + + DBG("\nFilling BinaryHeap with %d items...", max_items); + CHECK_INT(0, bh.Size(), 0); + CHECK_INT(1, CData::NumInstances(), 0); + int i = 0; + for (; i < max_items; i++) { + CData& d = data.Add(); + d.val = rand() & 0xFFFF; + bh.Push(d); + } + CHECK_INT(2, bh.Size(), max_items); + CHECK_INT(3, CData::NumInstances(), max_items); + + + DBG("\nShaking items %d times...", total_adds); + int num_last = bh.GetHead().val; + for (i = 0; i < total_adds; i++) { + CData& d = bh.PopHead(); + //printf("\nd->val = %d, num_last = %d", d->val, num_last); + CHECK_INT(4, d.val < num_last, 0); + if(d.val < num_last) { + printf("Sort error @ item %d", i); + } + num_last = d.val; + d.val += rand() & 0xFFFF; + bh.Push(d); + } + + + DBG("\nDone!"); + CHECK_INT(5, bh.Size(), max_items); + CHECK_INT(6, CData::NumInstances(), max_items); + } + CHECK_INT(7, CData::NumInstances(), 0); + return res; +} + + + +// this test uses CData and PData structures defined in test_autocopyptr.h + +static int TestBinaryHeap2(bool silent) +{ + CData::NumInstances() = 0; + int res = 0; + { + const int max_items = 10000; + const int total_adds = 1000000; + CBinaryHeapT bh(max_items); + CFixedSizeArrayT data; + + + DBG("\nFilling BinaryHeap with %d items...", max_items); + CHECK_INT(0, bh.Size(), 0); + CHECK_INT(1, CData::NumInstances(), 0); + int i = 0; + for (; i < max_items; i++) { + CData& d = data.Add(); + d.val = rand() & 0xFFFF; + bh.Push(d); + } + CHECK_INT(2, bh.Size(), max_items); + CHECK_INT(3, CData::NumInstances(), max_items); + + + DBG("\nShaking items %d times...", total_adds); + int num_last = bh.GetHead().val; + for (i = 0; i < total_adds; i++) { + CData& d = bh.GetHead(); + bh.RemoveHead(); + //printf("\nd->val = %d, num_last = %d", d->val, num_last); + CHECK_INT(4, d.val < num_last, 0); + if(d.val < num_last) { + printf("Sort error @ item %d", i); + } + num_last = d.val; + d.val += rand() & 0xFFFF; + bh.Push(d); + } + + + DBG("\nDone!"); + CHECK_INT(5, bh.Size(), max_items); + CHECK_INT(6, CData::NumInstances(), max_items); + } + CHECK_INT(7, CData::NumInstances(), 0); + return res; +} +