summaryrefslogtreecommitdiff
path: root/yapf/unittest/test_fixedsizearray.h
diff options
context:
space:
mode:
Diffstat (limited to 'yapf/unittest/test_fixedsizearray.h')
-rw-r--r--yapf/unittest/test_fixedsizearray.h114
1 files changed, 114 insertions, 0 deletions
diff --git a/yapf/unittest/test_fixedsizearray.h b/yapf/unittest/test_fixedsizearray.h
new file mode 100644
index 000000000..0065a821e
--- /dev/null
+++ b/yapf/unittest/test_fixedsizearray.h
@@ -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;
+}
+