2 using System.Collections.Generic;
10 static MText mt = new MText ("0123456789");
11 static MSymbol key = MSymbol.PropertyKey ("fse",
12 MProperty.Flags.FrontSensitive);
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] != null)
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] != null)
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] != null)
80 for (i = from; i < LENGTH && valtable[i] == sym; i++)
83 if (to < LENGTH && valtable[to] != null)
86 for (i = to; i < LENGTH && valtable[i] == sym; i++)
91 for (i = from; i < to; i++)
92 valtable2[i - from] = valtable[i];
95 for (i = to; i < LENGTH; i++)
96 valtable[i - l] = valtable[i];
97 valtable[LENGTH - l] = null;
99 // sensitivity for insertion
100 if (valtable[from2] != null)
102 sym = valtable[from2];
103 for (i = from2; i < LENGTH && valtable[i] == sym; i++)
106 if ((from > 0 || from2 > 0) && valtable2[0] != null)
109 for (i = 0; i < LENGTH && valtable2[i] == sym; i++)
114 for (i = LENGTH - 1; i >= from2 + l; i--)
115 valtable[i] = valtable[i - l];
118 for (i = from2; i < from2 + l; i++)
119 valtable[i] = valtable2[i - from2];
120 Console.WriteLine ("from {0}, to {1}, moveto {2}.\n", from, to, from2);
122 MText mt2 = mt.Dup ();
124 mt.Ins (from2, mt2, from, to);
127 static bool Compare ()
129 for (int i = 0; i < LENGTH; i++)
131 object val = mt.GetProp (i, key);
133 if (valtable[i] != (MSymbol) val)
135 Console.WriteLine ("valtable[{0}] is {1}, GetProp returned {2}",
137 valtable[i] == null ? MSymbol.nil : valtable[i],
138 val == null ? MSymbol.nil : val);
147 for (int i = 0; i < LENGTH; i++)
148 Console.WriteLine ("{0} {1} :", i, valtable[i]);
151 public static void Main (string[] args)
153 Random r = new Random (int.Parse (args[0]));
154 int check = (args.Length > 1 ? int.Parse (args[1]) : 0xFFFFFFF);
156 for (int loop = 0; loop < 1000000; loop++)
160 Console.WriteLine ("--- loop = {0} ---\n", loop);
163 mt.DumpPropNested ();
169 from = r.Next (LENGTH);
170 to = r.Next (LENGTH) + 1;
171 } while (from == to);
196 TestPushProp (from, to, prop);
199 TestPopProp (from, to, key);
202 TestDelIns (from, to, r.Next (LENGTH - (to - from) + 1));
207 mt.DumpPropNested ();
209 if (Compare () == false)
211 Console.WriteLine ("");
213 Console.WriteLine ("Failed.");