diff options
author | toma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2009-11-25 17:56:58 +0000 |
---|---|---|
committer | toma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2009-11-25 17:56:58 +0000 |
commit | 460c52653ab0dcca6f19a4f492ed2c5e4e963ab0 (patch) | |
tree | 67208f7c145782a7e90b123b982ca78d88cc2c87 /akregator/src/mk4storage/metakit/tests/tstore4.cpp | |
download | tdepim-460c52653ab0dcca6f19a4f492ed2c5e4e963ab0.tar.gz tdepim-460c52653ab0dcca6f19a4f492ed2c5e4e963ab0.zip |
Copy the KDE 3.5 branch to branches/trinity for new KDE 3.5 features.
BUG:215923
git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdepim@1054174 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'akregator/src/mk4storage/metakit/tests/tstore4.cpp')
-rw-r--r-- | akregator/src/mk4storage/metakit/tests/tstore4.cpp | 323 |
1 files changed, 323 insertions, 0 deletions
diff --git a/akregator/src/mk4storage/metakit/tests/tstore4.cpp b/akregator/src/mk4storage/metakit/tests/tstore4.cpp new file mode 100644 index 00000000..930c074c --- /dev/null +++ b/akregator/src/mk4storage/metakit/tests/tstore4.cpp @@ -0,0 +1,323 @@ +// tstore4.cpp -- Regression test program, storage tests, part 4 +// $Id$ +// This is part of Metakit, see http://www.equi4.com/metakit/ + +#include "regress.h" + +void TestStores4() +{ + B(s30, Memo storage, 0) W(s30a); + { + c4_Bytes hi ("hi", 2); + c4_Bytes gday ("gday", 4); + c4_Bytes hello ("hello", 5); + + c4_MemoProp p1 ("p1"); + c4_Storage s1 ("s30a", 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(s30a); R(s30a); E; + + // this failed in the unbuffered 1.8.5a interim release in Mk4tcl 1.0.5 + B(s31, Check sort buffer use, 0) W(s31a); + { + c4_IntProp p1 ("p1"); + c4_Storage s1 ("s31a", 1); + s1.SetStructure("a[p1:I]"); + c4_View v1 = s1.View("a"); + v1.Add(p1 [3]); + v1.Add(p1 [1]); + v1.Add(p1 [2]); + s1.Commit(); + + c4_View v2 = v1.SortOn(p1); + A(v2.GetSize() == 3); + A(p1 (v2[0]) == 1); + A(p1 (v2[1]) == 2); + A(p1 (v2[2]) == 3); + + } D(s31a); R(s31a); E; + + // this failed in 1.8.6, fixed 19990828 + B(s32, Set memo empty or same size, 0) W(s32a); + { + c4_Bytes empty; + c4_Bytes full ("full", 4); + c4_Bytes more ("more", 4); + + c4_MemoProp p1 ("p1"); + c4_Storage s1 ("s32a", 1); + s1.SetStructure("a[p1:B]"); + c4_View v1 = s1.View("a"); + + v1.Add(p1 [full]); + A(p1 (v1[0]) == full); + s1.Commit(); + A(p1 (v1[0]) == full); + + p1 (v1[0]) = empty; + A(p1 (v1[0]) == empty); + s1.Commit(); + A(p1 (v1[0]) == empty); + + p1 (v1[0]) = more; + A(p1 (v1[0]) == more); + s1.Commit(); + A(p1 (v1[0]) == more); + + p1 (v1[0]) = full; + A(p1 (v1[0]) == full); + s1.Commit(); + A(p1 (v1[0]) == full); + + } D(s32a); R(s32a); E; + + // this failed in 1.8.6, fixed 19990828 + B(s33, Serialize memo fields, 0) W(s33a); W(s33b); W(s33c); + { + c4_Bytes hi ("hi", 2); + c4_Bytes gday ("gday", 4); + c4_Bytes hello ("hello", 5); + + c4_MemoProp p1 ("p1"); + + c4_Storage s1 ("s33a", 1); + s1.SetStructure("a[p1:B]"); + c4_View v1 = s1.View("a"); + + v1.Add(p1 [hi]); + v1.Add(p1 [gday]); + v1.Add(p1 [hello]); + 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); + + { + c4_FileStream fs1 (fopen("s33b", "wb"), true); + s1.SaveTo(fs1); + } + + c4_Storage s2 ("s33c", 1); + + c4_FileStream fs2 (fopen("s33b", "rb"), true); + s2.LoadFrom(fs2); + + c4_View v2 = s2.View("a"); + A(p1 (v2[0]) == hi); + A(p1 (v2[1]) == gday); + A(p1 (v2[2]) == hello); + s2.Commit(); + A(p1 (v2[0]) == hi); + A(p1 (v2[1]) == gday); + A(p1 (v2[2]) == hello); + s2.Commit(); + A(p1 (v2[0]) == hi); + A(p1 (v2[1]) == gday); + A(p1 (v2[2]) == hello); + + } D(s33a); D(s33b); D(s33c); R(s33a); R(s33b); R(s33c); E; + + // check smarter commit and commit failure on r/o + B(s34, Smart and failed commits, 0) W(s34a); + { + c4_IntProp p1 ("p1"); + { + c4_Storage s1 ("s34a", 1); + s1.SetStructure("a[p1:I]"); + c4_View v1 = s1.View("a"); + v1.Add(p1 [111]); + A(v1.GetSize() == 1); + A(p1 (v1[0]) == 111); + bool f1 = s1.Commit(); + A(f1); + A(v1.GetSize() == 1); + A(p1 (v1[0]) == 111); + bool f2 = s1.Commit(); + A(f2); // succeeds, but should not write anything + A(v1.GetSize() == 1); + A(p1 (v1[0]) == 111); + } + { + c4_Storage s1 ("s34a", 0); + c4_View v1 = s1.View("a"); + v1.Add(p1 [222]); + A(v1.GetSize() == 2); + A(p1 (v1[0]) == 111); + A(p1 (v1[1]) == 222); + bool f1 = s1.Commit(); + A(!f1); + A(v1.GetSize() == 2); + A(p1 (v1[0]) == 111); + A(p1 (v1[1]) == 222); + } + } D(s34a); R(s34a); E; + + B(s35, Datafile with preamble, 0) W(s35a); + { + { + c4_FileStream fs1 (fopen("s35a", "wb"), true); + fs1.Write("abc", 3); + } + c4_IntProp p1 ("p1"); + { + c4_Storage s1 ("s35a", 1); + s1.SetStructure("a[p1:I]"); + c4_View v1 = s1.View("a"); + v1.Add(p1 [111]); + A(v1.GetSize() == 1); + A(p1 (v1[0]) == 111); + bool f1 = s1.Commit(); + A(f1); + A(v1.GetSize() == 1); + A(p1 (v1[0]) == 111); + bool f2 = s1.Commit(); + A(f2); // succeeds, but should not write anything + A(v1.GetSize() == 1); + A(p1 (v1[0]) == 111); + } + { + c4_FileStream fs1 (fopen("s35a", "rb"), true); + char buffer [10]; + int n1 = fs1.Read(buffer, 3); + A(n1 == 3); + A(c4_String (buffer, 3) == "abc"); + } + { + c4_Storage s1 ("s35a", 0); + c4_View v1 = s1.View("a"); + A(v1.GetSize() == 1); + A(p1 (v1[0]) == 111); + v1.Add(p1 [222]); + A(v1.GetSize() == 2); + A(p1 (v1[0]) == 111); + A(p1 (v1[1]) == 222); + bool f1 = s1.Commit(); + A(!f1); + A(v1.GetSize() == 2); + A(p1 (v1[0]) == 111); + A(p1 (v1[1]) == 222); + } + } D(s35a); R(s35a); E; + + B(s36, Commit after load, 0) W(s36a); W(s36b); + { + c4_IntProp p1 ("p1"); + + c4_Storage s1 ("s36a", 1); + s1.SetStructure("a[p1:I]"); + c4_View v1 = s1.View("a"); + v1.Add(p1 [111]); + A(v1.GetSize() == 1); + A(p1 (v1[0]) == 111); + + { + c4_FileStream fs1 (fopen("s36b", "wb"), true); + s1.SaveTo(fs1); + } + + p1 (v1[0]) = 222; + v1.Add(p1 [333]); + bool f1 = s1.Commit(); + A(f1); + A(v1.GetSize() == 2); + A(p1 (v1[0]) == 222); + A(p1 (v1[1]) == 333); + + c4_FileStream fs2 (fopen("s36b", "rb"), true); + s1.LoadFrom(fs2); + //A(v1.GetSize() == 0); // should be detached, but it's still 2 + + c4_View v2 = s1.View("a"); + A(v2.GetSize() == 1); + A(p1 (v2[0]) == 111); + + // this fails in 2.4.0, reported by James Lupo, August 2001 + bool f2 = s1.Commit(); + A(f2); + } D(s36a); D(s36b); R(s36a); R(s36b); E; + + // fails in 2.4.1, reported Oct 31. 2001 by Steve Baxter + B(s37, Change short partial fields, 0) W(s37a); + { + c4_BytesProp p1 ("p1"); + c4_Storage s1( "s37a", true ); + c4_View v1 = s1.GetAs("v1[key:I,p1:B]"); + + v1.Add(p1 [c4_Bytes ("12345", 6)]); + A(v1.GetSize() == 1); + s1.Commit(); + + c4_Bytes buf = p1 (v1[0]); + A(buf.Size() == 6); + A(buf == c4_Bytes ("12345", 6)); + buf = p1(v1[0]).Access(1,3); + A(buf == c4_Bytes ("234", 3)); + p1 (v1[0]).Modify(c4_Bytes ("ab", 2), 2, 0); + s1.Commit(); + + buf = p1 (v1[0]); + A(buf == c4_Bytes ("12ab5", 6)); + } D(s37a); R(s37a); E; + + // Gross memory use (but no leaks), January 2002, Murat Berk + B(s38, Lots of empty subviews, 0) W(s38a); + { + c4_BytesProp p1 ("p1"); + { + c4_Storage s1( "s38a", true ); + c4_View v = s1.GetAs("v[v1[p1:S]]"); + + v.SetSize(100000); + s1.Commit(); + } + { + c4_Storage s2( "s38a", true ); + c4_View v2 = s2.View("v"); + // this should not materialize all the empty subviews + v2.SetSize(v2.GetSize() + 1); + // nor should this + s2.Commit(); + } + { + c4_Storage s3( "s38a", true ); + c4_View v3 = s3.View("v"); + v3.RemoveAt(1, v3.GetSize() - 2); + A(v3.GetSize() == 2); + s3.Commit(); + } + } D(s38a); R(s38a); E; + + // Fix bug introduced on 7-2-2002, as reported by M. Berk + B(s39, Do not detach empty top-level views, 0) W(s39a); + { + c4_IntProp p1 ("p1"); + c4_Storage s1( "s39a", true ); + c4_View v1 = s1.GetAs("v1[p1:I]"); + s1.Commit(); + A(v1.GetSize() == 0); + v1.Add(p1 [123]); + A(v1.GetSize() == 1); + s1.Commit(); + c4_View v2 = s1.View("v1"); + A(v2.GetSize() == 1); // fails with 0 due to recent bug + } D(s39a); R(s39a); E; +} |