2 using System.Collections.Generic;
10 static MText mt = new MText ("0123456789");
11 static MSymbol key = MSymbol.PropertyKey ("rse",
12 MProperty.Flags.Sensitive);
13 static MSymbol val0 = MSymbol.Of ("0");
14 static MSymbol val1 = MSymbol.Of ("1");
15 static MSymbol val2 = MSymbol.Of ("2");
16 static MProperty prop0 = new MProperty (key, val0);
17 static MProperty prop1 = new MProperty (key, val1);
18 static MProperty prop2 = new MProperty (key, val2);
20 static MSymbol[] valtable = new MSymbol[LENGTH];
22 static void TestPushProp (int from, int to, MProperty prop)
27 if (from > 0 && valtable[from - 1] != null)
29 sym = valtable[from - 1];
30 for (i = from - 1; i >= 0 && valtable[i] == sym; i--)
33 if (to < LENGTH && valtable[to - 1] != null)
35 sym = valtable[to - 1];
36 for (i = to; i < LENGTH && valtable[i] == sym; i++)
39 for (i = from; i < to; i++)
40 valtable[i] = (MSymbol) prop.Val;
41 Console.WriteLine ("from {0}, to {1}, push {2}.\n", from, to, prop.Val);
43 mt.PushProp (from, to, prop);
46 static void TestPopProp (int from, int to, MSymbol key)
51 if (from > 0 && valtable[from - 1] != null)
53 sym = valtable[from - 1];
54 for (i = from - 1; i >= 0 && valtable[i] == sym; i--)
57 if (to < LENGTH && valtable[to - 1] != null)
59 sym = valtable[to - 1];
60 for (i = to; i < LENGTH && valtable[i] == sym; i++)
63 for (i = from; i < to; i++)
65 Console.WriteLine ("from {0}, to {1}, pop.\n", from, to);
67 mt.PopProp (from, to, key);
70 static void TestDelIns (int from, int to, int from2)
73 MSymbol[] valtable2 = new MSymbol[LENGTH];
76 // sensitivity for deletion
77 if (from > 0 && valtable[from - 1] != null)
79 sym = valtable[from - 1];
80 for (i = from - 1; i >= 0 && valtable[i] == sym; i--)
82 for (i = from; i < LENGTH && valtable[i] == sym; i++)
85 if (to < LENGTH && valtable[to - 1] != null)
87 sym = valtable[to - 1];
88 for (i = to - 1; i >= 0 && valtable[i] == sym; i--)
90 for (i = to; i < LENGTH && valtable[i] == sym; i++)
95 for (i = from; i < to; i++)
96 valtable2[i - from] = valtable[i];
99 for (i = to; i < LENGTH; i++)
100 valtable[i - l] = valtable[i];
102 // sensitivity for insertion
103 if (from2 > 0 && valtable[from2 - 1] != null)
105 sym = valtable[from2 - 1];
106 for (i = from2 - 1; i >= 0 && valtable[i] == sym; i--)
108 for (i = from2; i < LENGTH && valtable[i] == sym; i++)
113 for (i = LENGTH - 1; i >= from2 + l; i--)
114 valtable[i] = valtable[i - l];
117 for (i = from2; i < from2 + l; i++)
118 valtable[i] = valtable2[i - from2];
119 Console.WriteLine ("from {0}, to {1}, moveto {2}.\n", from, to, from2);
121 MText mt2 = mt.Dup ();
123 mt.Ins (from2, mt2, from, to);
126 static bool Compare ()
128 for (int i = 0; i < LENGTH; i++)
130 object val = mt.GetProp (i, key);
132 if (valtable[i] != (MSymbol) val)
134 Console.WriteLine ("valtable[{0}] is {1}, GetProp returned {2}",
135 i, valtable[i], val);
144 for (int i = 0; i < LENGTH; i++)
145 Console.WriteLine ("{0} {1} :", i, valtable[i]);
148 public static void Main (string[] args)
150 Random r = new Random (int.Parse (args[0]));
151 int check = (args.Length > 1 ? int.Parse (args[1]) : 0xFFFFFFF);
153 for (int loop = 0; loop < 1000000; loop++)
157 Console.WriteLine ("--- loop = {0} ---\n", loop);
160 mt.DumpPropNested ();
166 from = r.Next (LENGTH);
167 to = r.Next (LENGTH) + 1;
168 } while (from == to);
193 TestPushProp (from, to, prop);
196 TestPopProp (from, to, key);
199 TestDelIns (from, to, r.Next (LENGTH - (to - from) + 1));
204 mt.DumpPropNested ();
206 if (Compare () == false)
208 Console.WriteLine ("");
210 Console.WriteLine ("Failed.");