From: ntakahas Date: Tue, 9 Jun 2009 07:55:00 +0000 (+0000) Subject: New file. X-Git-Url: http://git.chise.org/gitweb/?a=commitdiff_plain;h=b29fc4e07b3d4b4d5453efb61c666607c19cfb17;p=m17n%2Fm17n-lib-cs.git New file. --- diff --git a/frontsensitive.cs b/frontsensitive.cs new file mode 100644 index 0000000..4ec15fe --- /dev/null +++ b/frontsensitive.cs @@ -0,0 +1,215 @@ +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 = MSymbol.PropertyKey ("fse", + MProperty.Flags.FrontSensitive); + 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 MSymbol[] valtable = new MSymbol[LENGTH]; + + static void TestPushProp (int from, int to, MProperty prop) + { + int i; + MSymbol sym; + + if (from > 0 && valtable[from] != null) + { + sym = valtable[from]; + for (i = from - 1; i >= 0 && valtable[i] == sym; i--) + valtable[i] = null; + } + if (to < LENGTH && valtable[to] != null) + { + sym = valtable[to]; + for (i = to; i < LENGTH && valtable[i] == sym; i++) + valtable[i] = null; + } + for (i = from; i < to; i++) + valtable[i] = (MSymbol) prop.Val; + Console.WriteLine ("from {0}, to {1}, push {2}.\n", from, to, prop.Val); + + mt.PushProp (from, to, prop); + } + + static void TestPopProp (int from, int to, MSymbol key) + { + int i; + MSymbol sym; + + if (from > 0 && valtable[from] != null) + { + sym = valtable[from]; + for (i = from - 1; i >= 0 && valtable[i] == sym; i--) + valtable[i] = null; + } + if (to < LENGTH && valtable[to] != null) + { + sym = valtable[to]; + for (i = to; i < LENGTH && valtable[i] == sym; i++) + valtable[i] = null; + } + for (i = from; i < to; i++) + valtable[i] = null; + Console.WriteLine ("from {0}, to {1}, pop.\n", from, to); + + mt.PopProp (from, to, key); + } + + static void TestDelIns (int from, int to, int from2) + { + int i, l = to - from; + MSymbol[] valtable2 = new MSymbol[LENGTH]; + MSymbol sym; + + // sensitivity for deletion + if (from > 0 && valtable[from] != null) + { + sym = valtable[from]; + for (i = from - 1; i >= 0 && valtable[i] == sym; i--) + valtable[i] = null; + for (i = from; i < LENGTH && valtable[i] == sym; i++) + valtable[i] = null; + } + if (to < LENGTH && valtable[to] != null) + { + sym = valtable[to]; + for (i = to - 1; i >= 0 && valtable[i] == sym; i--) + valtable[i] = null; + for (i = to; i < LENGTH && valtable[i] == sym; i++) + valtable[i] = null; + } + + // copy + for (i = from; i < to; i++) + valtable2[i - from] = valtable[i]; + + // delete + for (i = to; i < LENGTH; i++) + valtable[i - l] = valtable[i]; + + // sensitivity for insertion + if (from2 > 0 && valtable[from2] != null) + { + sym = valtable[from2]; + for (i = from2 - 1; i >= 0 && valtable[i] == sym; i--) + valtable[i] = null; + for (i = from2; i < LENGTH && valtable[i] == sym; i++) + valtable[i] = null; + } + + // move + for (i = LENGTH - 1; i >= from2 + l; i--) + valtable[i] = valtable[i - l]; + + // insert + for (i = from2; i < from2 + l; i++) + valtable[i] = valtable2[i - from2]; + 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++) + { + object val = mt.GetProp (i, key); + + if (valtable[i] != (MSymbol) val) + { + Console.WriteLine ("valtable[{0}] is {1}, GetProp returned {2}", + i, valtable[i], val); + return false; + } + } + return true; + } + + static void Dump () + { + for (int i = 0; i < LENGTH; i++) + Console.WriteLine ("{0} {1} :", i, valtable[i]); + } + + public static void Main (string[] args) + { + Random r = new Random (int.Parse (args[0])); + int check = (args.Length > 1 ? int.Parse (args[1]) : 0xFFFFFFF); + + for (int loop = 0; loop < 1000000; loop++) + { + int from, to; + + Console.WriteLine ("--- loop = {0} ---\n", loop); + if (loop >= check) + { + mt.DumpPropNested (); + Dump (); + M17n.debug = true; + } + + do { + from = r.Next (LENGTH); + to = r.Next (LENGTH) + 1; + } while (from == to); + if (from > to) + { + int tmp = from; + from = to; + to = tmp; + } + + MProperty prop; + switch (r.Next (3)) + { + case 0: + prop = prop0; + break; + case 1: + prop = prop1; + break; + default: + prop = prop2; + break; + } + + switch (r.Next (3)) + { + case 0: + TestPushProp (from, to, prop); + break; + case 1: + TestPopProp (from, to, key); + break; + case 2: + TestDelIns (from, to, r.Next (LENGTH - (to - from) + 1)); + break; + } + + if (M17n.debug) + mt.DumpPropNested (); + + if (Compare () == false) + { + Console.WriteLine (""); + Dump (); + Console.WriteLine ("Failed."); + return; + } + } + } +} diff --git a/rearsensitive.cs b/rearsensitive.cs new file mode 100644 index 0000000..9fa52bf --- /dev/null +++ b/rearsensitive.cs @@ -0,0 +1,215 @@ +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 = MSymbol.PropertyKey ("rse", + MProperty.Flags.Sensitive); + 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 MSymbol[] valtable = new MSymbol[LENGTH]; + + static void TestPushProp (int from, int to, MProperty prop) + { + int i; + MSymbol sym; + + if (from > 0 && valtable[from - 1] != null) + { + sym = valtable[from - 1]; + for (i = from - 1; i >= 0 && valtable[i] == sym; i--) + valtable[i] = null; + } + if (to < LENGTH && valtable[to - 1] != null) + { + sym = valtable[to - 1]; + for (i = to; i < LENGTH && valtable[i] == sym; i++) + valtable[i] = null; + } + for (i = from; i < to; i++) + valtable[i] = (MSymbol) prop.Val; + Console.WriteLine ("from {0}, to {1}, push {2}.\n", from, to, prop.Val); + + mt.PushProp (from, to, prop); + } + + static void TestPopProp (int from, int to, MSymbol key) + { + int i; + MSymbol sym; + + if (from > 0 && valtable[from - 1] != null) + { + sym = valtable[from - 1]; + for (i = from - 1; i >= 0 && valtable[i] == sym; i--) + valtable[i] = null; + } + if (to < LENGTH && valtable[to - 1] != null) + { + sym = valtable[to - 1]; + for (i = to; i < LENGTH && valtable[i] == sym; i++) + valtable[i] = null; + } + for (i = from; i < to; i++) + valtable[i] = null; + Console.WriteLine ("from {0}, to {1}, pop.\n", from, to); + + mt.PopProp (from, to, key); + } + + static void TestDelIns (int from, int to, int from2) + { + int i, l = to - from; + MSymbol[] valtable2 = new MSymbol[LENGTH]; + MSymbol sym; + + // sensitivity for deletion + if (from > 0 && valtable[from - 1] != null) + { + sym = valtable[from - 1]; + for (i = from - 1; i >= 0 && valtable[i] == sym; i--) + valtable[i] = null; + for (i = from; i < LENGTH && valtable[i] == sym; i++) + valtable[i] = null; + } + if (to < LENGTH && valtable[to - 1] != null) + { + sym = valtable[to - 1]; + for (i = to - 1; i >= 0 && valtable[i] == sym; i--) + valtable[i] = null; + for (i = to; i < LENGTH && valtable[i] == sym; i++) + valtable[i] = null; + } + + // copy + for (i = from; i < to; i++) + valtable2[i - from] = valtable[i]; + + // delete + for (i = to; i < LENGTH; i++) + valtable[i - l] = valtable[i]; + + // sensitivity for insertion + if (from2 > 0 && valtable[from2 - 1] != null) + { + sym = valtable[from2 - 1]; + for (i = from2 - 1; i >= 0 && valtable[i] == sym; i--) + valtable[i] = null; + for (i = from2; i < LENGTH && valtable[i] == sym; i++) + valtable[i] = null; + } + + // move + for (i = LENGTH - 1; i >= from2 + l; i--) + valtable[i] = valtable[i - l]; + + // insert + for (i = from2; i < from2 + l; i++) + valtable[i] = valtable2[i - from2]; + 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++) + { + object val = mt.GetProp (i, key); + + if (valtable[i] != (MSymbol) val) + { + Console.WriteLine ("valtable[{0}] is {1}, GetProp returned {2}", + i, valtable[i], val); + return false; + } + } + return true; + } + + static void Dump () + { + for (int i = 0; i < LENGTH; i++) + Console.WriteLine ("{0} {1} :", i, valtable[i]); + } + + public static void Main (string[] args) + { + Random r = new Random (int.Parse (args[0])); + int check = (args.Length > 1 ? int.Parse (args[1]) : 0xFFFFFFF); + + for (int loop = 0; loop < 1000000; loop++) + { + int from, to; + + Console.WriteLine ("--- loop = {0} ---\n", loop); + if (loop >= check) + { + mt.DumpPropNested (); + Dump (); + M17n.debug = true; + } + + do { + from = r.Next (LENGTH); + to = r.Next (LENGTH) + 1; + } while (from == to); + if (from > to) + { + int tmp = from; + from = to; + to = tmp; + } + + MProperty prop; + switch (r.Next (3)) + { + case 0: + prop = prop0; + break; + case 1: + prop = prop1; + break; + default: + prop = prop2; + break; + } + + switch (r.Next (3)) + { + case 0: + TestPushProp (from, to, prop); + break; + case 1: + TestPopProp (from, to, key); + break; + case 2: + TestDelIns (from, to, r.Next (LENGTH - (to - from) + 1)); + break; + } + + if (M17n.debug) + mt.DumpPropNested (); + + if (Compare () == false) + { + Console.WriteLine (""); + Dump (); + Console.WriteLine ("Failed."); + return; + } + } + } +}