You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
445 lines
10 KiB
445 lines
10 KiB
// tnotify.cpp -- Regression test program, notification tests
|
|
// $Id$
|
|
// This is part of Metakit, the homepage is http://www.equi4.com/metakit/
|
|
|
|
#include "regress.h"
|
|
|
|
void TestNotify()
|
|
{
|
|
B(n01, Add to selection, 0)
|
|
{
|
|
c4_IntProp p1 ("p1");
|
|
c4_View v1;
|
|
v1.Add(p1 [111]);
|
|
v1.Add(p1 [222]);
|
|
v1.Add(p1 [333]);
|
|
v1.Add(p1 [345]);
|
|
v1.Add(p1 [234]);
|
|
v1.Add(p1 [123]);
|
|
A(v1.GetSize() == 6);
|
|
c4_View v2 = v1.SelectRange(p1 [200], p1 [333]);
|
|
A(v2.GetSize() == 3);
|
|
A(p1 (v2[0]) == 222);
|
|
A(p1 (v2[1]) == 333);
|
|
A(p1 (v2[2]) == 234);
|
|
v1.Add(p1 [300]);
|
|
A(v1.GetSize() == 7);
|
|
A(v2.GetSize() == 4);
|
|
A(p1 (v2[0]) == 222);
|
|
A(p1 (v2[1]) == 333);
|
|
A(p1 (v2[2]) == 234);
|
|
A(p1 (v2[3]) == 300);
|
|
v1.Add(p1 [199]);
|
|
A(v1.GetSize() == 8);
|
|
A(v2.GetSize() == 4);
|
|
A(p1 (v2[0]) == 222);
|
|
A(p1 (v2[1]) == 333);
|
|
A(p1 (v2[2]) == 234);
|
|
A(p1 (v2[3]) == 300);
|
|
} E;
|
|
|
|
B(n02, Remove from selection, 0)
|
|
{
|
|
c4_IntProp p1 ("p1");
|
|
c4_View v1;
|
|
v1.Add(p1 [111]);
|
|
v1.Add(p1 [222]);
|
|
v1.Add(p1 [333]);
|
|
v1.Add(p1 [345]);
|
|
v1.Add(p1 [234]);
|
|
v1.Add(p1 [123]);
|
|
A(v1.GetSize() == 6);
|
|
c4_View v2 = v1.SelectRange(p1 [200], p1 [333]);
|
|
A(v2.GetSize() == 3);
|
|
A(p1 (v2[0]) == 222);
|
|
A(p1 (v2[1]) == 333);
|
|
A(p1 (v2[2]) == 234);
|
|
v1.RemoveAt(2);
|
|
A(v1.GetSize() == 5);
|
|
A(v2.GetSize() == 2);
|
|
A(p1 (v2[0]) == 222);
|
|
A(p1 (v2[1]) == 234);
|
|
v1.RemoveAt(2);
|
|
A(v1.GetSize() == 4);
|
|
A(v2.GetSize() == 2);
|
|
A(p1 (v2[0]) == 222);
|
|
A(p1 (v2[1]) == 234);
|
|
} E;
|
|
|
|
B(n03, Modify into selection, 0)
|
|
{
|
|
c4_IntProp p1 ("p1");
|
|
c4_View v1;
|
|
v1.Add(p1 [111]);
|
|
v1.Add(p1 [222]);
|
|
v1.Add(p1 [333]);
|
|
v1.Add(p1 [345]);
|
|
v1.Add(p1 [234]);
|
|
v1.Add(p1 [123]);
|
|
A(v1.GetSize() == 6);
|
|
c4_View v2 = v1.SelectRange(p1 [200], p1 [333]);
|
|
A(v2.GetSize() == 3);
|
|
A(p1 (v2[0]) == 222);
|
|
A(p1 (v2[1]) == 333);
|
|
A(p1 (v2[2]) == 234);
|
|
p1 (v1[5]) = 300;
|
|
A(v2.GetSize() == 4);
|
|
A(p1 (v2[0]) == 222);
|
|
A(p1 (v2[1]) == 333);
|
|
A(p1 (v2[2]) == 234);
|
|
A(p1 (v2[3]) == 300);
|
|
} E;
|
|
|
|
B(n04, Modify out of selection, 0)
|
|
{
|
|
c4_IntProp p1 ("p1");
|
|
c4_View v1;
|
|
v1.Add(p1 [111]);
|
|
v1.Add(p1 [222]);
|
|
v1.Add(p1 [333]);
|
|
v1.Add(p1 [345]);
|
|
v1.Add(p1 [234]);
|
|
v1.Add(p1 [123]);
|
|
A(v1.GetSize() == 6);
|
|
c4_View v2 = v1.SelectRange(p1 [200], p1 [333]);
|
|
A(v2.GetSize() == 3);
|
|
A(p1 (v2[0]) == 222);
|
|
A(p1 (v2[1]) == 333);
|
|
A(p1 (v2[2]) == 234);
|
|
p1 (v1[2]) = 100;
|
|
A(v2.GetSize() == 2);
|
|
A(p1 (v2[0]) == 222);
|
|
A(p1 (v2[1]) == 234);
|
|
} E;
|
|
|
|
B(n05, Add to sorted, 0)
|
|
{
|
|
c4_IntProp p1 ("p1");
|
|
c4_View v1;
|
|
v1.Add(p1 [111]);
|
|
v1.Add(p1 [222]);
|
|
v1.Add(p1 [333]);
|
|
v1.Add(p1 [345]);
|
|
v1.Add(p1 [234]);
|
|
v1.Add(p1 [123]);
|
|
A(v1.GetSize() == 6);
|
|
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);
|
|
v1.Add(p1 [300]);
|
|
A(v2.GetSize() == 7);
|
|
A(p1 (v2[0]) == 111);
|
|
A(p1 (v2[1]) == 123);
|
|
A(p1 (v2[2]) == 222);
|
|
A(p1 (v2[3]) == 234);
|
|
A(p1 (v2[4]) == 300);
|
|
A(p1 (v2[5]) == 333);
|
|
A(p1 (v2[6]) == 345);
|
|
} E;
|
|
|
|
B(n06, Remove from sorted, 0)
|
|
{
|
|
c4_IntProp p1 ("p1");
|
|
c4_View v1;
|
|
v1.Add(p1 [111]);
|
|
v1.Add(p1 [222]);
|
|
v1.Add(p1 [333]);
|
|
v1.Add(p1 [345]);
|
|
v1.Add(p1 [234]);
|
|
v1.Add(p1 [123]);
|
|
A(v1.GetSize() == 6);
|
|
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);
|
|
v1.RemoveAt(2);
|
|
A(v2.GetSize() == 5);
|
|
A(p1 (v2[0]) == 111);
|
|
A(p1 (v2[1]) == 123);
|
|
A(p1 (v2[2]) == 222);
|
|
A(p1 (v2[3]) == 234);
|
|
A(p1 (v2[4]) == 345);
|
|
} E;
|
|
|
|
B(n07, New property through sort, 0)
|
|
{
|
|
c4_IntProp p1 ("p1"), p2 ("p2");
|
|
c4_View v1;
|
|
v1.Add(p1 [11]);
|
|
v1.Add(p1 [1]);
|
|
v1.Add(p1 [111]);
|
|
A(v1.FindProperty(p2.GetId()) < 0);
|
|
|
|
c4_View v2 = v1.SortOn(p1);
|
|
A(v2.FindProperty(p2.GetId()) < 0);
|
|
|
|
A(v2.GetSize() == 3);
|
|
A(p1 (v2[0]) == 1);
|
|
A(p1 (v2[1]) == 11);
|
|
A(p1 (v2[2]) == 111);
|
|
|
|
p2 (v1[0]) = 22;
|
|
A(v1.FindProperty(p2.GetId()) == 1);
|
|
A(v2.FindProperty(p2.GetId()) == 1);
|
|
|
|
A(p2 (v2[1]) == 22);
|
|
} E;
|
|
|
|
B(n08, Nested project and select, 0)
|
|
{
|
|
c4_IntProp p1 ("p1"), p2 ("p2");
|
|
c4_View v1;
|
|
v1.Add(p1 [10] + p2 [1]);
|
|
v1.Add(p1 [11]);
|
|
v1.Add(p1 [12] + p2 [1]);
|
|
v1.Add(p1 [13]);
|
|
v1.Add(p1 [14] + p2 [1]);
|
|
v1.Add(p1 [15]);
|
|
v1.Add(p1 [16] + p2 [1]);
|
|
A(v1.GetSize() == 7);
|
|
|
|
c4_View v2 = v1.Select(p2 [1]);
|
|
A(v2.GetSize() == 4);
|
|
A(p1 (v2[0]) == 10);
|
|
A(p1 (v2[1]) == 12);
|
|
A(p1 (v2[2]) == 14);
|
|
A(p1 (v2[3]) == 16);
|
|
|
|
c4_View v3 = v2.Project(p1);
|
|
A(v3.GetSize() == 4);
|
|
A(p1 (v3[0]) == 10);
|
|
A(p1 (v3[1]) == 12);
|
|
A(p1 (v3[2]) == 14);
|
|
A(p1 (v3[3]) == 16);
|
|
|
|
A(p2 (v3[0]) == 0);
|
|
A(p2 (v3[1]) == 0);
|
|
A(p2 (v3[2]) == 0);
|
|
A(p2 (v3[3]) == 0);
|
|
|
|
/* not yet implemented: setting result of selection
|
|
p1 (v3[1]) = 123;
|
|
A(p1 (v3[1]) == 123);
|
|
A(p1 (v2[1]) == 123);
|
|
A(p1 (v1[2]) == 123);
|
|
*/
|
|
} E;
|
|
|
|
B(n09, Multiple dependencies, 0)
|
|
{
|
|
c4_IntProp p1 ("p1"), p2 ("p2");
|
|
c4_View v1;
|
|
v1.Add(p1 [111] + p2[1111]);
|
|
v1.Add(p1 [222]);
|
|
v1.Add(p1 [333]);
|
|
v1.Add(p1 [345]);
|
|
v1.Add(p1 [234]);
|
|
v1.Add(p1 [123]);
|
|
A(v1.GetSize() == 6);
|
|
|
|
c4_View v2 = v1.SelectRange(p1 [200], p1 [333]);
|
|
A(v2.GetSize() == 3);
|
|
A(p1 (v2[0]) == 222);
|
|
A(p1 (v2[1]) == 333);
|
|
A(p1 (v2[2]) == 234);
|
|
|
|
c4_View v3 = v1.SelectRange(p1 [340], p1 [350]);
|
|
A(v3.GetSize() == 1);
|
|
A(p1 (v3[0]) == 345);
|
|
|
|
c4_View v4 = v2.SortOn(p1);
|
|
A(v4.GetSize() == 3);
|
|
A(p1 (v4[0]) == 222);
|
|
A(p1 (v4[1]) == 234);
|
|
A(p1 (v4[2]) == 333);
|
|
|
|
c4_View v5 = v3.SortOn(p1);
|
|
A(v5.GetSize() == 1);
|
|
A(p1 (v5[0]) == 345);
|
|
|
|
p1 (v1[2]) = 346;
|
|
|
|
A(v2.GetSize() == 2);
|
|
A(p1 (v2[0]) == 222);
|
|
A(p1 (v2[1]) == 234);
|
|
|
|
A(v3.GetSize() == 2);
|
|
A(p1 (v3[0]) == 346);
|
|
A(p1 (v3[1]) == 345);
|
|
|
|
A(v4.GetSize() == 2);
|
|
A(p1 (v4[0]) == 222);
|
|
A(p1 (v4[1]) == 234);
|
|
|
|
A(v5.GetSize() == 2);
|
|
A(p1 (v5[0]) == 345);
|
|
A(p1 (v5[1]) == 346);
|
|
} E;
|
|
|
|
B(n10, Modify sorted duplicates, 0)
|
|
{
|
|
c4_IntProp p1 ("p1");
|
|
c4_View v1;
|
|
v1.SetSize(3);
|
|
p1 (v1[0]) = 0;
|
|
c4_View v2 = v1.Sort();
|
|
p1 (v1[0]) = 1;
|
|
p1 (v1[1]) = 1; // crashed in 1.5, fix in: c4_SortSeq::PosInMap
|
|
} E;
|
|
|
|
B(n11, Resize compound derived view, 0)
|
|
{
|
|
c4_IntProp p1 ("p1"), p2 ("p2");
|
|
c4_View v1 = (p1, p2);
|
|
c4_View v2 = v1.SelectRange(p2 [200], p2 [333]);
|
|
c4_View v3 = v2.SortOn(p1);
|
|
A(v2.GetSize() == 0);
|
|
A(v3.GetSize() == 0);
|
|
v1.SetSize(1); // crashed in 1.5, fix in: c4_FilterSeq::Match
|
|
A(v1.GetSize() == 1);
|
|
A(v2.GetSize() == 0);
|
|
A(v3.GetSize() == 0);
|
|
v1[0] = p2 [300];
|
|
A(v1.GetSize() == 1);
|
|
A(v2.GetSize() == 1);
|
|
A(v3.GetSize() == 1);
|
|
A(p2 (v2[0]) == 300);
|
|
v1.Add(p1 [199]);
|
|
A(v1.GetSize() == 2);
|
|
A(v2.GetSize() == 1);
|
|
A(p2 (v2[0]) == 300);
|
|
} E;
|
|
|
|
B(n12, Alter multiply derived view, 0)
|
|
{
|
|
c4_IntProp p1 ("p1");
|
|
c4_StringProp p2 ("p2"), p3 ("p3");
|
|
c4_View v1 = (p1, p2);
|
|
c4_View v2 = v1.Select(p1 [1]);
|
|
c4_View v3 = v2.SortOn(p2);
|
|
c4_View v4 = v1.Select(p1 [2]);
|
|
c4_View v5 = v4.SortOn(p2);
|
|
|
|
v1.Add(p1[1] + p2 ["een"] + p3 ["1"]);
|
|
v1.Add(p1[1] + p2 ["elf"] + p3 ["11"]);
|
|
v1.Add(p1[2] + p2 ["twee"] + p3 ["2"]);
|
|
v1.Add(p1[2] + p2 ["twaalf"] + p3 ["12"]);
|
|
v1.Add(p1[2] + p2 ["twintig"] + p3 ["20"]);
|
|
v1.Add(p1[2] + p2 ["tachtig"] + p3 ["80"]);
|
|
|
|
A(v1.GetSize() == 6);
|
|
A(v2.GetSize() == 2);
|
|
A(v3.GetSize() == 2);
|
|
A(v4.GetSize() == 4);
|
|
A(v5.GetSize() == 4);
|
|
|
|
A(p3 (v1[2]) == (c4_String) "2");
|
|
A(p3 (v4[0]) == (c4_String) "2");
|
|
|
|
A(p3 (v3[0]) == (c4_String) "1");
|
|
A(p3 (v3[1]) == (c4_String) "11");
|
|
|
|
A(p3 (v5[0]) == (c4_String) "80");
|
|
A(p3 (v5[1]) == (c4_String) "12");
|
|
A(p3 (v5[2]) == (c4_String) "2");
|
|
A(p3 (v5[3]) == (c4_String) "20");
|
|
|
|
v1[3] = p1[2] + p2 ["twaalf"] + p3 ["12+"];
|
|
|
|
A(p3 (v3[0]) == (c4_String) "1");
|
|
A(p3 (v3[1]) == (c4_String) "11");
|
|
|
|
A(p3 (v1[3]) == (c4_String) "12+");
|
|
A(p3 (v4[1]) == (c4_String) "12+");
|
|
|
|
A(p3 (v5[0]) == (c4_String) "80");
|
|
A(p3 (v5[1]) == (c4_String) "12+");
|
|
A(p3 (v5[2]) == (c4_String) "2");
|
|
A(p3 (v5[3]) == (c4_String) "20");
|
|
} E;
|
|
|
|
B(n13, Project without, 0) // failed in 1.8.4
|
|
{
|
|
c4_IntProp p1 ("p1"), p2 ("p2");
|
|
c4_View v1;
|
|
|
|
v1.Add(p1 [1] + p2 [2]);
|
|
int n1 = v1.NumProperties();
|
|
A(n1 == 2);
|
|
|
|
c4_View v2 = v1.ProjectWithout(p2);
|
|
int n2 = v2.NumProperties();
|
|
A(n2 == 1);
|
|
} E;
|
|
|
|
/*
|
|
B(n14, Add to reverse sorted, 0)
|
|
{
|
|
c4_IntProp p1 ("p1"), p2 ("p2");
|
|
c4_View v1;
|
|
v1.Add(p1 [333] + p2 [1]);
|
|
v1.Add(p1 [345] + p2 [1]);
|
|
v1.Add(p1 [234] + p2 [1]);
|
|
v1.Add(p1 [123] + p2 [0]);
|
|
A(v1.GetSize() == 4);
|
|
c4_View v1a = v1.Select(p2 [1]);
|
|
A(v1a.GetSize() == 3);
|
|
c4_View v1b = v1a.SelectRange(p1 [100], p1 [999]);
|
|
A(v1b.GetSize() == 3);
|
|
c4_View v2 = v1b.SortOnReverse(p1, p1);
|
|
A(v2.GetSize() == 3);
|
|
A(p1 (v2[0]) == 345);
|
|
A(p1 (v2[1]) == 333);
|
|
A(p1 (v2[2]) == 234);
|
|
v1.Add(p1 [300] + p2 [1]);
|
|
A(v2.GetSize() == 4);
|
|
A(p1 (v2[0]) == 345);
|
|
A(p1 (v2[1]) == 333);
|
|
A(p1 (v2[2]) == 300);
|
|
A(p1 (v2[3]) == 234);
|
|
v1.Add(p1 [299] + p2 [1]);
|
|
A(v2.GetSize() == 5);
|
|
A(p1 (v2[0]) == 345);
|
|
A(p1 (v2[1]) == 333);
|
|
A(p1 (v2[2]) == 300);
|
|
A(p1 (v2[3]) == 299);
|
|
A(p1 (v2[4]) == 234);
|
|
} E;
|
|
*/
|
|
// this failed in 2.4.8, reported by S. Selznick, 2002-11-22
|
|
B(n14, Insert in non-mapped position, 0) W(n14a);
|
|
{
|
|
c4_IntProp p1 ("p1");
|
|
c4_Storage s1 ("n14a", 1);
|
|
s1.SetStructure("a[p1:I]");
|
|
c4_View v1 = s1.View("a");
|
|
|
|
static int intlist[] = { 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, -1 };
|
|
for (int c = 0; -1 != intlist[c]; c++)
|
|
v1.Add(p1 [intlist[c]]);
|
|
|
|
A(v1.GetSize() == 10);
|
|
c4_View v2 = v1.Select(p1 [1]);
|
|
A(v2.GetSize() == 3);
|
|
|
|
v1.InsertAt(3, p1 [6]);
|
|
A(v1.GetSize() == 11);
|
|
A(v2.GetSize() == 3);
|
|
|
|
v1.InsertAt(7, p1 [1]);
|
|
A(v1.GetSize() == 12);
|
|
A(v2.GetSize() == 4);
|
|
|
|
s1.Commit();
|
|
} D(n14a); R(n14a); E;
|
|
}
|