using System;
using System.Collections.Generic;
+using M17N;
using M17N.Core;
public class Test
const int LENGTH = 10;
const int DEPTH = 10;
static MText mt = new MText ("0123456789");
- static MSymbol key = new MSymbol ("k");
- static MSymbol val0 = new MSymbol ("0");
- static MSymbol val1 = new MSymbol ("1");
- static MSymbol val2 = new MSymbol ("2");
- static MTextProperty prop0 = new MTextProperty (key, val0);
- static MTextProperty prop1 = new MTextProperty (key, val1);
- static MTextProperty prop2 = new MTextProperty (key, val2);
-
- static int[] nvals = new int[10];
+ static MSymbol key = MSymbol.PropertyKey ("___");
+#if false
+ static MSymbol key_r = MSymbol.PropertyKey ("r__",
+ MProperty.Flags.RearSticky);
+ static MSymbol key_f = MSymbol.PropertyKey ("_f_",
+ MProperty.Flags.FrontSticky);
+ static MSymbol key_rf = MSymbol.PropertyKey ("rf_",
+ (MProperty.Flags.RearSticky
+ | MProperty.Flags.FrontSticky));
+ static MSymbol key_s = MSymbol.PropertyKey ("__s",
+ MProperty.Flags.Sensitive);
+ static MSymbol key_rs = MSymbol.PropertyKey ("r_s",
+ (MProperty.Flags.RearSticky
+ | MProperty.Flags.Sensitive));
+ static MSymbol key_fs = MSymbol.PropertyKey ("_fs",
+ (MProperty.Flags.FrontSticky
+ | MProperty.Flags.Sensitive));
+ static MSymbol key_rfs = MSymbol.PropertyKey ("rfs",
+ (MProperty.Flags.RearSticky
+ | MProperty.Flags.FrontSticky
+ | MProperty.Flags.Sensitive));
+#endif
+
+ static MSymbol val0 = MSymbol.Of ("0");
+ static MSymbol val1 = MSymbol.Of ("1");
+ static MSymbol val2 = MSymbol.Of ("2");
+ static MProperty prop0 = new MProperty (key, val0);
+ static MProperty prop1 = new MProperty (key, val1);
+ static MProperty prop2 = new MProperty (key, val2);
+
+ static int[] nvals = new int[LENGTH];
static MSymbol[,] valtable = new MSymbol[LENGTH, DEPTH + 1];
static void TestPushProp (int from, int to, MSymbol key, MSymbol val)
valtable[i, nvals[i]] = val;
nvals[i]++;
}
- Console.WriteLine ("from {0}, to {1}, {2}.\n", from, to, val);
+ Console.WriteLine ("from {0}, to {1}, push {2}, {3}.\n",
+ from, to, key, val);
mt.PushProp (from, to, key, val);
}
- static void TestPushProp (int from, int to, MTextProperty prop)
+ static void TestPushProp (int from, int to, MProperty prop)
{
for (int i = from; i < to; i++)
if (nvals[i] == DEPTH)
valtable[i, nvals[i]] = (MSymbol) prop.Val;
nvals[i]++;
}
- Console.WriteLine ("from {0}, to {1}, {2}.\n", from, to, prop);
+ Console.WriteLine ("from {0}, to {1}, push {2}.\n", from, to, prop);
mt.PushProp (from, to, prop);
}
mt.PopProp (from, to, key);
}
+ static void TestDelIns (int from, int to, int from2)
+ {
+ int i, j, l = to - from;
+ int[] nvals2 = new int[LENGTH];
+ MSymbol[,] valtable2 = new MSymbol[LENGTH, DEPTH + 1];
+
+ // copy
+ for (i = from; i < to; i++)
+ {
+ nvals2[i - from] = nvals[i];
+ for (j = 0; j < nvals[i]; j++)
+ valtable2[i - from, j] = valtable[i, j];
+ }
+
+ // delete
+ for (i = to; i < LENGTH; i++)
+ {
+ nvals[i - l] = nvals[i];
+ for (j = 0; j < nvals[i]; j++)
+ valtable[i - l, j] = valtable[i, j];
+ }
+
+ // move
+ for (i = LENGTH - 1; i >= from2 + l; i--)
+ {
+ nvals[i] = nvals[i - l];
+ for (j = 0; j < nvals[i]; j++)
+ valtable[i, j] = valtable[i - l, j];
+ }
+
+ // insert
+ for (i = from2; i < from2 + l; i++)
+ {
+ nvals[i] = nvals2[i - from2];
+ for (j = 0; j < nvals[i]; j++)
+ valtable[i, j] = valtable2[i - from2, j];
+ }
+ Console.WriteLine ("from {0}, to {1}, moveto {2}.\n", from, to, from2);
+
+ MText mt2 = mt.Dup ();
+ mt.Del (from, to);
+ mt.Ins (from2, mt2, from, to);
+ }
+
static bool Compare ()
{
for (int i = 0; i < LENGTH; i++)
{
- MTextProperty[] array;
+ MProperty[] array;
object val = mt.GetProp (i, key, out array);
if (array == null)
public static void Main (string[] args)
{
Random r = new Random (int.Parse (args[0]));
- int check = (args.Length > 1 ? int.Parse (args[1]) : -1);
+ int check = (args.Length > 1 ? int.Parse (args[1]) : 0xFFFFFFF);
- for (int loop = 0; loop < 100000; loop++)
+ for (int loop = 0; loop < 1000000; loop++)
{
Console.WriteLine ("--- loop = {0} ---\n", loop);
- if (loop == check)
+ if (loop >= check)
{
mt.DumpPropNested ();
Dump ();
- M17N.M17N.debug = true;
+ M17n.debug = true;
}
int from = r.Next (LENGTH);
break;
}
- MTextProperty prop;
- //MTextProperty prop = r.Next (2) == 0 ? prop0 : prop1;
+ MProperty prop;
+ //MProperty prop = r.Next (2) == 0 ? prop0 : prop1;
switch (r.Next (3))
{
case 0:
break;
}
- switch (r.Next (3))
+ switch (r.Next (4))
{
case 0:
TestPushProp (from, to, key, val);
case 2:
TestPopProp (from, to, key);
break;
+ case 3:
+ TestDelIns (from, to, r.Next (LENGTH - (to - from) + 1));
+ break;
}
+ if (M17n.debug)
+ mt.DumpPropNested ();
+
if (Compare () == false)
{
- mt.DumpPropNested ();
Console.WriteLine ("");
Dump ();
Console.WriteLine ("Failed.");
return;
}
}
-
}
}