yapf/unittest/test_binaryheap.h
changeset 4562 48ab394a84e8
parent 4561 98779da22b99
child 4563 241260bd5505
equal deleted inserted replaced
4561:98779da22b99 4562:48ab394a84e8
     1 /* $Id$ */
       
     2 
       
     3 // this test uses CData structure defined in test_autocopyptr.h
       
     4 
       
     5 static int TestBinaryHeap1(bool silent)
       
     6 {
       
     7 	CData::NumInstances() = 0;
       
     8 	int res = 0;
       
     9 	{
       
    10 		const int max_items = 10000;
       
    11 		const int total_adds = 1000000;
       
    12 		CBinaryHeapT<CData> bh(max_items);
       
    13 		CFixedSizeArrayT<CData, max_items> data;
       
    14 
       
    15 
       
    16 		DBG("\nFilling BinaryHeap with %d items...", max_items);
       
    17 		CHECK_INT(0, bh.Size(), 0);
       
    18 		CHECK_INT(1, CData::NumInstances(), 0);
       
    19 		int i = 0;
       
    20 		for (; i < max_items; i++) {
       
    21 			CData& d = data.Add();
       
    22 			d.val = rand() & 0xFFFF;
       
    23 			bh.Push(d);
       
    24 		}
       
    25 		CHECK_INT(2, bh.Size(), max_items);
       
    26 		CHECK_INT(3, CData::NumInstances(), max_items);
       
    27 
       
    28 
       
    29 		DBG("\nShaking items %d times...", total_adds);
       
    30 		int num_last = bh.GetHead().val;
       
    31 		for (i = 0; i < total_adds; i++) {
       
    32 			CData& d = bh.PopHead();
       
    33 			//printf("\nd->val = %d, num_last = %d", d->val, num_last);
       
    34 			CHECK_INT(4, d.val < num_last, 0);
       
    35 			if(d.val < num_last) {
       
    36 				printf("Sort error @ item %d", i);
       
    37 			}
       
    38 			num_last = d.val;
       
    39 			d.val += rand() & 0xFFFF;
       
    40 			bh.Push(d);
       
    41 		}
       
    42 
       
    43 
       
    44 		DBG("\nDone!");
       
    45 		CHECK_INT(5, bh.Size(), max_items);
       
    46 		CHECK_INT(6, CData::NumInstances(), max_items);
       
    47 	}
       
    48 	CHECK_INT(7, CData::NumInstances(), 0);
       
    49 	return res;
       
    50 }
       
    51 
       
    52 
       
    53 
       
    54 // this test uses CData and PData structures defined in test_autocopyptr.h
       
    55 
       
    56 static int TestBinaryHeap2(bool silent)
       
    57 {
       
    58 	CData::NumInstances() = 0;
       
    59 	int res = 0;
       
    60 	{
       
    61 		const int max_items = 10000;
       
    62 		const int total_adds = 1000000;
       
    63 		CBinaryHeapT<CData> bh(max_items);
       
    64 		CFixedSizeArrayT<CData, max_items> data;
       
    65 
       
    66 
       
    67 		DBG("\nFilling BinaryHeap with %d items...", max_items);
       
    68 		CHECK_INT(0, bh.Size(), 0);
       
    69 		CHECK_INT(1, CData::NumInstances(), 0);
       
    70 		int i = 0;
       
    71 		for (; i < max_items; i++) {
       
    72 			CData& d = data.Add();
       
    73 			d.val = rand() & 0xFFFF;
       
    74 			bh.Push(d);
       
    75 		}
       
    76 		CHECK_INT(2, bh.Size(), max_items);
       
    77 		CHECK_INT(3, CData::NumInstances(), max_items);
       
    78 
       
    79 
       
    80 		DBG("\nShaking items %d times...", total_adds);
       
    81 		int num_last = bh.GetHead().val;
       
    82 		for (i = 0; i < total_adds; i++) {
       
    83 			CData& d = bh.GetHead();
       
    84 			bh.RemoveHead();
       
    85 			//printf("\nd->val = %d, num_last = %d", d->val, num_last);
       
    86 			CHECK_INT(4, d.val < num_last, 0);
       
    87 			if(d.val < num_last) {
       
    88 				printf("Sort error @ item %d", i);
       
    89 			}
       
    90 			num_last = d.val;
       
    91 			d.val += rand() & 0xFFFF;
       
    92 			bh.Push(d);
       
    93 		}
       
    94 
       
    95 
       
    96 		DBG("\nDone!");
       
    97 		CHECK_INT(5, bh.Size(), max_items);
       
    98 		CHECK_INT(6, CData::NumInstances(), max_items);
       
    99 	}
       
   100 	CHECK_INT(7, CData::NumInstances(), 0);
       
   101 	return res;
       
   102 }