*** empty log message ***
[m17n/m17n-lib-cs.git] / textprop.cs
index d036b83..a184c94 100644 (file)
@@ -1,5 +1,6 @@
 using System;
 using System.Collections.Generic;
+using M17N;
 using M17N.Core;
 
 public class Test
@@ -7,15 +8,15 @@ 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.Of ("k");
+  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)
@@ -29,12 +30,13 @@ public class Test
        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)
@@ -45,7 +47,7 @@ public class Test
        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);
   }
@@ -63,11 +65,55 @@ public class Test
     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)
@@ -150,16 +196,16 @@ public class Test
   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++)
       {
-       if (loop == check)
+       Console.WriteLine ("--- loop = {0} ---\n", loop);
+       if (loop >= check)
          {
-           Console.WriteLine ("--- loop = {0} ---\n", loop);
            mt.DumpPropNested ();
            Dump ();
-           M17N.M17N.debug = true;
+           M17n.debug = true;
          }
 
        int from = r.Next (LENGTH);
@@ -186,8 +232,8 @@ public class Test
            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:
@@ -201,7 +247,7 @@ public class Test
            break;
          }
 
-       switch (r.Next (3))
+       switch (r.Next (4))
          {
          case 0:
            TestPushProp (from, to, key, val);
@@ -212,17 +258,21 @@ public class Test
          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;
          }
       }
-
   }
 }