summaryrefslogtreecommitdiffstats
path: root/akregator/src/mk4storage/metakit/tests/tstore3.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'akregator/src/mk4storage/metakit/tests/tstore3.cpp')
-rw-r--r--akregator/src/mk4storage/metakit/tests/tstore3.cpp366
1 files changed, 366 insertions, 0 deletions
diff --git a/akregator/src/mk4storage/metakit/tests/tstore3.cpp b/akregator/src/mk4storage/metakit/tests/tstore3.cpp
new file mode 100644
index 000000000..21418151c
--- /dev/null
+++ b/akregator/src/mk4storage/metakit/tests/tstore3.cpp
@@ -0,0 +1,366 @@
+// tstore3.cpp -- Regression test program, storage tests, part 3
+// $Id$
+// This is part of Metakit, the homepage is http://www.equi4.com/metakit/
+
+#include "regress.h"
+
+void TestStores3()
+{
+ B(s20, View outlives storage, 0) W(s20a);
+ {
+ c4_IntProp p1 ("p1");
+ c4_View v1;
+
+ {
+ c4_Storage s1 ("s20a", 1);
+ v1 = s1.GetAs("a[p1:I,p2:S]");
+ v1.Add(p1 [123]);
+ }
+
+ // 19990916 - semantics changed, rows kept but no properties
+ //A(p1 (v1[0]) == 123);
+ A(v1.GetSize() == 1);
+ A(v1.NumProperties() == 0);
+
+ } D(s20a); R(s20a); E;
+
+ B(s21, Test demo scenario, 0) W(s21a);
+ {
+ c4_StringProp p1 ("p1"), p2 ("p2");
+ {
+ c4_Storage storage ("s21a", 1);
+ storage.SetStructure("a[p1:S,p2:S]");
+ c4_View v1;
+ c4_Row r1;
+
+ p1 (r1) = "One";
+ p2 (r1) = "Un";
+ v1.Add(r1);
+ A(v1.GetSize() == 1);
+
+ p1 (r1) = "Two";
+ p2 (r1) = "Deux";
+ v1.Add(r1);
+ A(v1.GetSize() == 2);
+
+ // changed 2000-03-15: Store is gone
+ //v1 = storage.Store("a", v1);
+ v1 = storage.View("a") = v1;
+
+ A(v1.GetSize() == 2);
+ A(p1 (v1[1]) == (c4_String) "Two");
+ A(p2 (v1[1]) == (c4_String) "Deux");
+ A(p1 (v1[0]) == (c4_String) "One");
+ A(p2 (v1[0]) == (c4_String) "Un");
+
+ storage.Commit();
+ A(v1.GetSize() == 2);
+ A(p1 (v1[1]) == (c4_String) "Two");
+ A(p2 (v1[1]) == (c4_String) "Deux");
+ A(p1 (v1[0]) == (c4_String) "One");
+ A(p2 (v1[0]) == (c4_String) "Un");
+
+ c4_String s1 (p1 (v1[1]));
+ c4_String s2 (p2 (v1[1]));
+ A(s1 == "Two");
+ A(s2 == "Deux");
+
+ storage.Commit();
+
+ v1.Add(p1 ["Three"] + p2 ["Trois"]);
+
+ storage.Commit();
+ A(v1.GetSize() == 3);
+ A(p2 (v1[2]) == (c4_String) "Trois");
+
+ v1 = storage.GetAs("a[p1:S,p2:S,p3:I]");
+ A(v1.GetSize() == 3);
+ A(p2 (v1[2]) == (c4_String) "Trois");
+
+ c4_IntProp p3 ("p3");
+ p3 (v1[1]) = 123;
+
+ storage.Commit();
+ A(v1.GetSize() == 3);
+ A(p2 (v1[2]) == (c4_String) "Trois");
+
+ c4_View v2 = storage.GetAs("b[p4:I]");
+
+ c4_IntProp p4 ("p4");
+ v2.Add(p4 [234]);
+
+ storage.Commit();
+ A(v1.GetSize() == 3);
+ A(p2 (v1[2]) == (c4_String) "Trois");
+
+ c4_IntProp p4a ("p4");
+ v1.InsertAt(2, p1 ["Four"] + p4a [345]);
+
+ storage.Commit();
+ A(v1.GetSize() == 4);
+ A(p1 (v1[0]) == (c4_String) "One");
+ A(p1 (v1[1]) == (c4_String) "Two");
+ A(p1 (v1[2]) == (c4_String) "Four");
+ A(p1 (v1[3]) == (c4_String) "Three");
+ A(p2 (v1[3]) == (c4_String) "Trois");
+ A(v2.GetSize() == 1);
+ A(p4 (v2[0]) == 234);
+ }
+ {
+ c4_Storage storage ("s21a", 0);
+ c4_View v1 = storage.View("a");
+ A(v1.GetSize() == 4);
+ A(p1 (v1[0]) == (c4_String) "One");
+ A(p1 (v1[1]) == (c4_String) "Two");
+ A(p1 (v1[2]) == (c4_String) "Four");
+ A(p1 (v1[3]) == (c4_String) "Three");
+ c4_View v2 = storage.View("b");
+ c4_IntProp p4 ("p4");
+ A(v2.GetSize() == 1);
+ A(p4 (v2[0]) == 234);
+ }
+ } D(s21a); R(s21a); E;
+
+#if !q4_TINY
+ B(s22, Double storage, 0) W(s22a);
+ {
+ c4_DoubleProp p1 ("p1");
+ c4_Storage s1 ("s22a", 1);
+ s1.SetStructure("a[p1:D]");
+ c4_View v1 = s1.View("a");
+ v1.Add(p1 [1234.5678]);
+ v1.Add(p1 [2345.6789]);
+ v1.InsertAt(1, p1 [3456.7890]);
+ s1.Commit();
+ } D(s22a); R(s22a); E;
+#endif
+
+ B(s23, Find absent record, 0) W(s23a);
+ {
+ c4_Storage s1 ("s23a", 1);
+ s1.SetStructure("v[h:S,p:I,a:I,b:I,c:I,d:I,e:I,f:I,g:I,x:I]");
+ c4_View view = s1.View("v");
+
+ c4_StringProp H("h");
+ c4_IntProp P("p");
+
+ c4_Row row;
+ H(row) = "someString";
+ P(row) = 99;
+
+ int x = view.Find(row);
+ A(x == -1);
+
+ } D(s23a); R(s23a); E;
+
+ B(s24, Bitwise storage, 0) W(s24a);
+ {
+ c4_IntProp p1 ("p1");
+
+ int m = 9;
+
+ // insert values in front, but check fractional sizes at each step
+ for (int n = 0; n < m; ++n)
+ {
+ {
+ c4_Storage s1 ("s24a", 1);
+ s1.SetStructure("a1[p1:I],a2[p1:I],a3[p1:I],a4[p1:I]");
+ s1.AutoCommit(); // new feature in 1.6
+
+ c4_View v1 = s1.View("a1");
+ c4_View v2 = s1.View("a2");
+ c4_View v3 = s1.View("a3");
+ c4_View v4 = s1.View("a4");
+
+ c4_Row row;
+ int k = ~ n;
+
+ p1 (row) = k & 0x01;
+ v1.InsertAt(0, row);
+
+ p1 (row) = k & 0x03;
+ v2.InsertAt(0, row);
+
+ p1 (row) = k & 0x0F;
+ v3.InsertAt(0, row);
+
+ p1 (row) = k & 0x7F;
+ v4.InsertAt(0, row);
+ }
+ // the following checks that all tiny size combinations work
+ {
+ c4_Storage s1 ("s24a", 0);
+
+ c4_View v1 = s1.View("a1");
+ c4_View v2 = s1.View("a2");
+ c4_View v3 = s1.View("a3");
+ c4_View v4 = s1.View("a4");
+
+ A(v1.GetSize() == n + 1);
+ A(v2.GetSize() == n + 1);
+ A(v3.GetSize() == n + 1);
+ A(v4.GetSize() == n + 1);
+ }
+ }
+
+ c4_Storage s1 ("s24a", 0);
+
+ c4_View v1 = s1.View("a1");
+ c4_View v2 = s1.View("a2");
+ c4_View v3 = s1.View("a3");
+ c4_View v4 = s1.View("a4");
+
+ A(v1.GetSize() == m);
+ A(v2.GetSize() == m);
+ A(v3.GetSize() == m);
+ A(v4.GetSize() == m);
+
+ // now check that the inserted values are correct
+ for (int i = 0; i < m; ++i)
+ {
+ int j = m - i - 1;
+ int k = ~ i;
+
+ A(p1 (v1[j]) == (k & 0x01));
+ A(p1 (v2[j]) == (k & 0x03));
+ A(p1 (v3[j]) == (k & 0x0F));
+ A(p1 (v4[j]) == (k & 0x7F));
+ }
+
+ } D(s24a); R(s24a); E;
+
+ B(s25, Bytes storage, 0) W(s25a);
+ {
+ c4_Bytes hi ("hi", 2);
+ c4_Bytes gday ("gday", 4);
+ c4_Bytes hello ("hello", 5);
+
+ c4_BytesProp p1 ("p1");
+ c4_Storage s1 ("s25a", 1);
+ s1.SetStructure("a[p1:B]");
+ c4_View v1 = s1.View("a");
+
+ v1.Add(p1 [hi]);
+ A(p1 (v1[0]) == hi);
+ v1.Add(p1 [hello]);
+ A(p1 (v1[0]) == hi);
+ A(p1 (v1[1]) == hello);
+ v1.InsertAt(1, p1 [gday]);
+ A(p1 (v1[0]) == hi);
+ A(p1 (v1[1]) == gday);
+ A(p1 (v1[2]) == hello);
+ s1.Commit();
+ A(p1 (v1[0]) == hi);
+ A(p1 (v1[1]) == gday);
+ A(p1 (v1[2]) == hello);
+
+ } D(s25a); R(s25a); E;
+
+ B(s26, Bitwise autosizing, 0) W(s26a);
+ {
+ c4_IntProp p1 ("p1"), p2 ("p2"), p3 ("p3"), p4 ("p4");
+ c4_Storage s1 ("s26a", 1);
+ s1.SetStructure("a[p1:I,p2:I,p3:I,p4:I]");
+ c4_View v1 = s1.View("a");
+
+ v1.Add(p1 [1] + p2 [3] + p3 [15] + p4 [127]);
+ A(p1 (v1[0]) == 1);
+ A(p2 (v1[0]) == 3);
+ A(p3 (v1[0]) == 15);
+ A(p4 (v1[0]) == 127);
+
+ p1 (v1[0]) = 100000L;
+ p2 (v1[0]) = 100000L;
+ p3 (v1[0]) = 100000L;
+ p4 (v1[0]) = 100000L;
+
+ // these failed in 1.61
+ A(p1 (v1[0]) == 100000L);
+ A(p2 (v1[0]) == 100000L);
+ A(p3 (v1[0]) == 100000L);
+ A(p4 (v1[0]) == 100000L);
+
+ s1.Commit();
+
+ } D(s26a); R(s26a); E;
+
+ B(s27, Bytes restructuring, 0) W(s27a);
+ {
+ c4_Bytes test ("test", 4);
+
+ c4_BytesProp p1 ("p1");
+ c4_Storage s1 ("s27a", 1);
+
+ c4_Row row;
+ p1 (row) = test;
+
+ c4_View v1;
+ v1.Add(row);
+
+ // changed 2000-03-15: Store is gone
+ //s1.Store("a", v1); // asserts in 1.61
+ c4_View v2 = s1.GetAs("a[p1:B]");
+ v2.InsertAt(0, v1);
+
+ s1.Commit();
+
+ } D(s27a); R(s27a); E;
+
+#if !q4_TINY
+ B(s28, Doubles added later, 0) W(s28a);
+ {
+ c4_FloatProp p1 ("p1");
+ c4_DoubleProp p2 ("p2");
+ c4_ViewProp p3 ("p3");
+
+ c4_Storage s1 ("s28a", 1);
+ s1.SetStructure("a[p1:F,p2:D,p3[p1:F,p2:D]]");
+ c4_View v1 = s1.View("a");
+
+ c4_Row r1;
+
+ p1 (r1) = 123;
+ p2 (r1) = 123;
+
+ c4_View v2;
+ v2.Add (p1 [234] + p2 [234]);
+ p3 (r1) = v2;
+
+ v1.Add(r1);
+ double x1 = p1 (v1[0]);
+ A(x1 == p2 (v1[0]));
+
+ v2 = p3 (v1[0]);
+ double x2 = p1 (v2[0]);
+ A(x2 == p2 (v2[0])); // fails in 1.6
+
+ s1.Commit();
+
+ } D(s28a); R(s28a); E;
+#endif
+
+ B(s29, Delete bytes property, 0) W(s29a);
+ {
+ {
+ c4_BytesProp p1 ("p1");
+
+ c4_Storage s1 ("s29a", 1);
+ s1.SetStructure("a[p1:B]");
+ c4_View v1 = s1.View("a");
+
+ int data = 99;
+ v1.Add(p1 [c4_Bytes (&data, sizeof data)]);
+
+ s1.Commit();
+ }
+ {
+ c4_Storage s1 ("s29a", 1);
+ c4_View v1 = s1.View("a");
+
+ v1.RemoveAt(0); // asserts in 1.7
+
+ s1.Commit();
+ }
+
+ } D(s29a); R(s29a); E;
+}