yapf/unittest/test_fixedsizearray.h
changeset 3900 2c84ed52709d
child 3971 77061ae9b534
equal deleted inserted replaced
3899:5ba7f20a14ca 3900:2c84ed52709d
       
     1 /* $Id$ */
       
     2 
       
     3 struct CFsaItem
       
     4 {
       
     5 	int i;
       
     6 
       
     7 	FORCEINLINE static int& NumInstances() { static int num_instances = 0; return num_instances; };
       
     8 
       
     9 	FORCEINLINE CFsaItem(int i = 0)
       
    10 	{
       
    11 		this->i = i;
       
    12 		NumInstances()++;
       
    13 		DBG("(*)");
       
    14 	}
       
    15 
       
    16 	FORCEINLINE CFsaItem(const CFsaItem& src)
       
    17 	{
       
    18 		this->i = src.i;
       
    19 		NumInstances()++;
       
    20 		DBG("(c)");
       
    21 	}
       
    22 
       
    23 	FORCEINLINE ~CFsaItem()
       
    24 	{
       
    25 		NumInstances()--;
       
    26 		DBG("(-)");
       
    27 	}
       
    28 };
       
    29 
       
    30 typedef CFixedSizeArrayT<CFsaItem, 4> CSubArray;
       
    31 typedef CFixedSizeArrayT<CSubArray, 4> CSuperArray;
       
    32 
       
    33 static int TestFixedSizeArray(bool silent)
       
    34 {
       
    35 	int res = 0;
       
    36 	{
       
    37 		CSuperArray a;
       
    38 
       
    39 		CHECK_INT(0, a.IsFull(), false);
       
    40 		CHECK_INT(1, a.IsEmpty(), true);
       
    41 
       
    42 		CSubArray& b1 = a.Add();
       
    43 		b1.Add().i = 1;
       
    44 		new(&b1.AddNC())CFsaItem(2);
       
    45 
       
    46 		CSubArray& b2 = a.Add();
       
    47 		new(&b2.AddNC())CFsaItem(3);
       
    48 		b2.Add().i = 4;
       
    49 
       
    50 		CSubArray& b3 = a.AddNC();
       
    51 		new(&b3)CSubArray(b1);
       
    52 
       
    53 		CSubArray& b4 = a.AddNC();
       
    54 		new(&b4)CSubArray(b2);
       
    55 
       
    56 		CHECK_INT(2, a[0][0].i, 1);
       
    57 		CHECK_INT(3, b1[1].i, 2);
       
    58 		CHECK_INT(4, b1.Size(), 2);
       
    59 		CHECK_INT(5, a[3][0].i, 3);
       
    60 		CHECK_INT(6, a[3][1].i, 4);
       
    61 		CHECK_INT(7, CFsaItem::NumInstances(), 4);
       
    62 		CHECK_INT(8, a.IsFull(), true);
       
    63 		CHECK_INT(9, a.IsEmpty(), false);
       
    64 		CHECK_INT(10, a[3].IsFull(), false);
       
    65 		CHECK_INT(11, a[3].IsEmpty(), false);
       
    66 	}
       
    67 	CHECK_INT(12, CFsaItem::NumInstances(), 0);
       
    68 
       
    69 	return res;
       
    70 }
       
    71 
       
    72 typedef CArrayT<CFsaItem, 2> CArray;
       
    73 
       
    74 static int TestArray(bool silent)
       
    75 {
       
    76 	int res = 0;
       
    77 	{
       
    78 		CArray a;
       
    79 
       
    80 		CHECK_INT(0, a.IsFull(), false);
       
    81 		CHECK_INT(1, a.IsEmpty(), true);
       
    82 
       
    83 		CHECK_INT(2, a.Size(), 0);
       
    84 
       
    85 		a.Add().i = 1;
       
    86 		CHECK_INT(3, a.Size(), 1);
       
    87 
       
    88 		new(&a.AddNC())CFsaItem(2);
       
    89 		CHECK_INT(4, a.Size(), 2);
       
    90 
       
    91 		CHECK_INT(5, a.IsFull(), false);
       
    92 		CHECK_INT(6, a.IsEmpty(), false);
       
    93 
       
    94 		a.Add().i = 3;
       
    95 		CHECK_INT(7, a.Size(), 3);
       
    96 
       
    97 		new(&a.AddNC())CFsaItem(4);
       
    98 		CHECK_INT(8, a.Size(), 4);
       
    99 
       
   100 		CHECK_INT(9, a[0].i, 1);
       
   101 		CHECK_INT(10, a[1].i, 2);
       
   102 		CHECK_INT(11, a[2].i, 3);
       
   103 		CHECK_INT(12, a[3].i, 4);
       
   104 
       
   105 		CHECK_INT(13, a.IsFull(), true);
       
   106 		CHECK_INT(14, a.IsEmpty(), false);
       
   107 
       
   108 		CHECK_INT(15, CFsaItem::NumInstances(), 4);
       
   109 	}
       
   110 	CHECK_INT(16, CFsaItem::NumInstances(), 0);
       
   111 
       
   112 	return res;
       
   113 }
       
   114