yapf/unittest/test_fixedsizearray.h
changeset 3900 4984308f9125
child 3971 2116cd6db7fd
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/yapf/unittest/test_fixedsizearray.h	Sat May 27 16:12:16 2006 +0000
@@ -0,0 +1,114 @@
+/* $Id$ */
+
+struct CFsaItem
+{
+	int i;
+
+	FORCEINLINE static int& NumInstances() { static int num_instances = 0; return num_instances; };
+
+	FORCEINLINE CFsaItem(int i = 0)
+	{
+		this->i = i;
+		NumInstances()++;
+		DBG("(*)");
+	}
+
+	FORCEINLINE CFsaItem(const CFsaItem& src)
+	{
+		this->i = src.i;
+		NumInstances()++;
+		DBG("(c)");
+	}
+
+	FORCEINLINE ~CFsaItem()
+	{
+		NumInstances()--;
+		DBG("(-)");
+	}
+};
+
+typedef CFixedSizeArrayT<CFsaItem, 4> CSubArray;
+typedef CFixedSizeArrayT<CSubArray, 4> CSuperArray;
+
+static int TestFixedSizeArray(bool silent)
+{
+	int res = 0;
+	{
+		CSuperArray a;
+
+		CHECK_INT(0, a.IsFull(), false);
+		CHECK_INT(1, a.IsEmpty(), true);
+
+		CSubArray& b1 = a.Add();
+		b1.Add().i = 1;
+		new(&b1.AddNC())CFsaItem(2);
+
+		CSubArray& b2 = a.Add();
+		new(&b2.AddNC())CFsaItem(3);
+		b2.Add().i = 4;
+
+		CSubArray& b3 = a.AddNC();
+		new(&b3)CSubArray(b1);
+
+		CSubArray& b4 = a.AddNC();
+		new(&b4)CSubArray(b2);
+
+		CHECK_INT(2, a[0][0].i, 1);
+		CHECK_INT(3, b1[1].i, 2);
+		CHECK_INT(4, b1.Size(), 2);
+		CHECK_INT(5, a[3][0].i, 3);
+		CHECK_INT(6, a[3][1].i, 4);
+		CHECK_INT(7, CFsaItem::NumInstances(), 4);
+		CHECK_INT(8, a.IsFull(), true);
+		CHECK_INT(9, a.IsEmpty(), false);
+		CHECK_INT(10, a[3].IsFull(), false);
+		CHECK_INT(11, a[3].IsEmpty(), false);
+	}
+	CHECK_INT(12, CFsaItem::NumInstances(), 0);
+
+	return res;
+}
+
+typedef CArrayT<CFsaItem, 2> CArray;
+
+static int TestArray(bool silent)
+{
+	int res = 0;
+	{
+		CArray a;
+
+		CHECK_INT(0, a.IsFull(), false);
+		CHECK_INT(1, a.IsEmpty(), true);
+
+		CHECK_INT(2, a.Size(), 0);
+
+		a.Add().i = 1;
+		CHECK_INT(3, a.Size(), 1);
+
+		new(&a.AddNC())CFsaItem(2);
+		CHECK_INT(4, a.Size(), 2);
+
+		CHECK_INT(5, a.IsFull(), false);
+		CHECK_INT(6, a.IsEmpty(), false);
+
+		a.Add().i = 3;
+		CHECK_INT(7, a.Size(), 3);
+
+		new(&a.AddNC())CFsaItem(4);
+		CHECK_INT(8, a.Size(), 4);
+
+		CHECK_INT(9, a[0].i, 1);
+		CHECK_INT(10, a[1].i, 2);
+		CHECK_INT(11, a[2].i, 3);
+		CHECK_INT(12, a[3].i, 4);
+
+		CHECK_INT(13, a.IsFull(), true);
+		CHECK_INT(14, a.IsEmpty(), false);
+
+		CHECK_INT(15, CFsaItem::NumInstances(), 4);
+	}
+	CHECK_INT(16, CFsaItem::NumInstances(), 0);
+
+	return res;
+}
+