diff options
Diffstat (limited to 'akregator/src/mk4storage/metakit/tests/tbasic2.cpp')
-rw-r--r-- | akregator/src/mk4storage/metakit/tests/tbasic2.cpp | 218 |
1 files changed, 218 insertions, 0 deletions
diff --git a/akregator/src/mk4storage/metakit/tests/tbasic2.cpp b/akregator/src/mk4storage/metakit/tests/tbasic2.cpp new file mode 100644 index 000000000..53c6b307f --- /dev/null +++ b/akregator/src/mk4storage/metakit/tests/tbasic2.cpp @@ -0,0 +1,218 @@ +// tbasic2.cpp -- Regression test program, basic tests part 2 +// $Id$ +// This is part of Metakit, the homepage is http://www.equi4.com/metakit/ + +#include "regress.h" + + static int ViewSize(c4_View v) + { + return v.GetSize(); + } + +void TestBasics2() +{ + B(b20, Search sorted view, 0) + { + c4_IntProp p1 ("p1"); + c4_StringProp p2 ("p2"); + c4_View v1; + v1.Add(p1 [111] + p2 ["one"]); + v1.Add(p1 [222] + p2 ["two"]); + v1.Add(p1 [333] + p2 ["three"]); + v1.Add(p1 [345] + p2 ["four"]); + v1.Add(p1 [234] + p2 ["five"]); + v1.Add(p1 [123] + p2 ["six"]); + c4_View v2 = v1.Sort(); + A(v2.GetSize() == 6); + A(p1 (v2[0]) == 111); + A(p1 (v2[1]) == 123); + A(p1 (v2[2]) == 222); + A(p1 (v2[3]) == 234); + A(p1 (v2[4]) == 333); + A(p1 (v2[5]) == 345); + A(v2.Search(p1 [123]) == 1); + A(v2.Search(p1 [100]) == 0); + A(v2.Search(p1 [200]) == 2); + A(v2.Search(p1 [400]) == 6); + c4_View v3 = v1.SortOn(p2); + A(v3.GetSize() == 6); + A(p1 (v3[0]) == 234); + A(p1 (v3[1]) == 345); + A(p1 (v3[2]) == 111); + A(p1 (v3[3]) == 123); + A(p1 (v3[4]) == 333); + A(p1 (v3[5]) == 222); + A(v3.Search(p2 ["six"]) == 3); + A(v3.Search(p2 ["aha"]) == 0); + A(v3.Search(p2 ["gee"]) == 2); + A(v3.Search(p2 ["wow"]) == 6); + c4_View v4 = v1.SortOnReverse(p2, p2); + A(v4.GetSize() == 6); + A(p1 (v4[0]) == 222); + A(p1 (v4[1]) == 333); + A(p1 (v4[2]) == 123); + A(p1 (v4[3]) == 111); + A(p1 (v4[4]) == 345); + A(p1 (v4[5]) == 234); + A(v4.Search(p2 ["six"]) == 2); + A(v4.Search(p2 ["aha"]) == 6); + A(v4.Search(p2 ["gee"]) == 4); + A(v4.Search(p2 ["wow"]) == 0); + } E; + + B(b21, Memo property, 0) + { + c4_Row r1; + c4_MemoProp p1 ("p1"); + c4_Bytes x1 ("hi!", 3); + + p1 (r1) = x1; + c4_Bytes x2 = p1 (r1); + A(x1 == x2); + } E; + + B(b22, Stored view references, 0) + { + c4_ViewProp p1 ("p1"); + c4_View v1; + + { + v1.Add(p1 [c4_View ()]); + } + + // this works + int n = ViewSize(p1.Get(v1[0])); + A(n == 0); + + // this fails in 1.8b2 using MSVC 1.52 (tq_wvus) + // + // The compiler destructs temp c4_View once too often, or + // what's more likely, fails to call the constructor once. + // + // So for MSVC 1.52: use prop.Get(rowref) for subviews, + // or immediately assign the result to a c4_View object, + // do not pass a "prop (rowref)" expression as argument. + +#if _MSC_VER != 800 + int m = ViewSize(p1 (v1[0])); + A(m == 0); +#endif + } E; + + B(b23, Sort comparison fix, 0) // 1.9e: compare buffering problem + { + c4_DoubleProp p1 ("p1"); + c4_View v1; + for (int i = 0; i < 100; ++i) + v1.Add(p1 [99-i]); + c4_View v2 = v1.Sort(); + A(v2.GetSize() == 100); + for (int j = 0; j < 100; ++j) + { + A(p1 (v1[j]) == (double) 99-j); + A(p1 (v2[j]) == (double) j); + } + } E; + + B(b24, Custom view comparisons, 0) // 1.9f: more compare cache problems + { + c4_IntProp p1 ("p1"); + c4_FloatProp p2 ("p2"); + c4_DoubleProp p3 ("p3"); + c4_IntProp p4 ("p4"); + c4_View v1; + v1.Add(p1 [2] + p2 [2] + p3 [2]); + v1.Add(p1 [1] + p2 [1] + p3 [1]); + v1.Add(p1 [3] + p2 [3] + p3 [3]); + A(v1.GetSize() == 3); + A((int) p1 (v1[0]) > (int) p1 (v1[1])); + A((float) p2 (v1[0]) > (float) p2 (v1[1])); + A((double) p3 (v1[0]) > (double) p3 (v1[1])); + A((int) p1 (v1[0]) < (int) p1 (v1[2])); + A((float) p2 (v1[0]) < (float) p2 (v1[2])); + A((double) p3 (v1[0]) < (double) p3 (v1[2])); + c4_View v2 = v1.Unique(); + A(v2.GetSize() == 3); + A((int) p1 (v2[0]) != (int) p1 (v2[1])); + A((float) p2 (v2[0]) != (float) p2 (v2[1])); + A((double) p3 (v2[0]) != (double) p3 (v2[1])); + A((int) p1 (v2[0]) != (int) p1 (v2[2])); + A((float) p2 (v2[0]) != (float) p2 (v2[2])); + A((double) p3 (v2[0]) != (double) p3 (v2[2])); + v1.Add(p1 [2] + p2 [2] + p3 [2]); + v1.Add(p1 [1] + p2 [1] + p3 [1]); + v1.Add(p1 [3] + p2 [3] + p3 [3]); + c4_View v3 = v1.Unique(); + A(v3.GetSize() == 3); + A((int) p1 (v3[0]) != (int) p1 (v3[1])); + A((float) p2 (v3[0]) != (float) p2 (v3[1])); + A((double) p3 (v3[0]) != (double) p3 (v3[1])); + A((int) p1 (v3[0]) != (int) p1 (v3[2])); + A((float) p2 (v3[0]) != (float) p2 (v3[2])); + A((double) p3 (v3[0]) != (double) p3 (v3[2])); + c4_View v4 = v1.Counts(p1, p4); + A(v4.GetSize() == 3); + c4_View v5 = v1.Counts(p2, p4); + A(v5.GetSize() == 3); // this failed in 1.9f + c4_View v6 = v1.Counts(p3, p4); + A(v6.GetSize() == 3); // this failed in 1.9f + } E; + + B(b25, Copy row from derived, 0) + { + c4_IntProp p1 ("p1"); + c4_View v1; + v1.Add(p1 [111]); + v1.Add(p1 [222]); + v1.Add(p1 [333]); + c4_View v2 = v1.Select(p1 [222]); + A(v2.GetSize() == 1); + A(p1 (v2[0]) == 222); + c4_Row r = v2[0]; + A(p1 (r) == 222); // 1.9g: failed because SetAt did not remap + } E; + + B(b26, Partial memo field access, 0) + { + c4_BytesProp p1 ("p1"); + c4_View v1; + v1.Add(p1 [c4_Bytes ("12345", 5)]); + A(v1.GetSize() == 1); + c4_Bytes buf = p1 (v1[0]); + A(buf.Size() == 5); + A(buf == c4_Bytes ("12345", 5)); + buf = p1(v1[0]).Access(1,3); + A(buf == c4_Bytes ("234", 3)); + p1 (v1[0]).Modify(c4_Bytes ("ab", 2), 2, 0); + buf = p1 (v1[0]); + A(buf == c4_Bytes ("12ab5", 5)); + p1 (v1[0]).Modify(c4_Bytes ("ABC", 3), 1, 2); + buf = p1 (v1[0]); + A(buf == c4_Bytes ("1ABCab5", 7)); + p1 (v1[0]).Modify(c4_Bytes ("xyz", 3), 2, -2); + buf = p1 (v1[0]); + A(buf == c4_Bytes ("1Axyz", 5)); + p1 (v1[0]).Modify(c4_Bytes ("3456", 4), 4, 0); + buf = p1 (v1[0]); + A(buf == c4_Bytes ("1Axy3456", 8)); + } E; + + B(b27, Copy value to another row, 0) + { + c4_StringProp p1 ("p1"); + c4_View v1; + v1.SetSize(2); + p1 (v1[1]) = "abc"; + // next assert fails in MacOS X 10.2.1 "Jaguar" with 2.4.7 + // seems bug in gcc 3.1, -O i.s.o. -O2 works [jcw 21oct02] + A((const char*) (p1 (v1[0])) == (c4_String) ""); + A((const char*) (p1 (v1[1])) == (c4_String) "abc"); + + // fails in 2.4.0, reported by Jerry McRae, August 2001 + p1 (v1[0]) = (const char*) p1 (v1[1]); + // MacOS 10.2.3 gcc 3.1 dec 2002 is still weird, inserting the + // following code (which should be a noop) *fixes* the assert! + //const char* q = p1 (v1[1]); + A((c4_String)(const char*) (p1 (v1[0])) == (c4_String) "abc"); + } E; +} |