public ArithmeticMatrix(NumeralSet numeralSet) { if (numeralSet == null) throw new ArgumentNullException("numeralSet"); this._numeralSet = numeralSet; var keys = this._numeralSet.SymbolSet.As<LinkedList<string>>().Values; this._addMap = new SquareLookup<Tuple<string, bool>>(keys); this._subtractMap = new SquareLookup<Tuple<string, bool>>(keys); this._compareMap = new SquareLookup<bool?>(keys); foreach (var key1 in keys) { foreach (var key2 in keys) { var dig1 = numeralSet.GetSymbolicDigit(key1); var rollover = dig1.Add(key2); this._addMap.Add(key1, key2, new Tuple<string, bool>(dig1.Symbol, rollover)); dig1 = numeralSet.GetSymbolicDigit(key1); rollover = dig1.Subtract(key2); this._subtractMap.Add(key1, key2, new Tuple<string, bool>(dig1.Symbol, rollover)); dig1 = numeralSet.GetSymbolicDigit(key1); var compare = dig1.Compare(key2); this._compareMap.Add(key1, key2, compare); } } }
public static void Test() { //init the set NumeralSet set = new NumeralSet(".", "-"); for (int i = 0; i < 10; i++) { set.AddSymbolToSet(i.ToString()); } var digit = set.GetSymbolicDigit("0"); Debug.Assert(digit.Symbol == "0"); var s = digit.AddOne(); Debug.Assert(!s); Debug.Assert(digit.Symbol == "1"); digit.AddOne(); Debug.Assert(digit.Symbol == "2"); s = digit.Add("9"); Debug.Assert(digit.Symbol == "1"); Debug.Assert(s); digit.Subtract("1"); Debug.Assert(digit.Symbol == "0"); s = digit.SubtractOne(); Debug.Assert(digit.Symbol == "9"); Debug.Assert(s); for (int i = 0; i < 9; i++) { var i2 = i + 1; var digit1 = set.GetSymbolicDigit(i.ToString()); var comp = digit1.Compare(i2.ToString()); Debug.Assert(comp.Value == false); var digit2 = set.GetSymbolicDigit(i2.ToString()); digit1.AddOne(); Debug.Assert(digit1.Symbol == i2.ToString()); } }
public static void Test() { //init the set NumeralSet set = new NumeralSet(".", "-"); for (int i = 0; i < 10; i++) { set.AddSymbolToSet(i.ToString()); } Debug.Assert(set.DecimalSymbol == "."); Debug.Assert(set.NegativeSymbol == "-"); Debug.Assert(set.ZeroSymbol == "0"); Debug.Assert(set.OneSymbol == "1"); var parse1 = set.ParseSymbols("1234567890", true, true); Debug.Assert(parse1.Length == 10); Debug.Assert(parse1[0] == "1"); Debug.Assert(parse1[1] == "2"); Debug.Assert(parse1[2] == "3"); Debug.Assert(parse1[3] == "4"); Debug.Assert(parse1[4] == "5"); Debug.Assert(parse1[5] == "6"); Debug.Assert(parse1[6] == "7"); Debug.Assert(parse1[7] == "8"); Debug.Assert(parse1[8] == "9"); Debug.Assert(parse1[9] == "0"); var parse2 = set.ParseSymbols("-1234567890.123", true, true); Debug.Assert(parse2[0] == "-"); Debug.Assert(parse2[1] == "1"); Debug.Assert(parse2[2] == "2"); Debug.Assert(parse2[3] == "3"); Debug.Assert(parse2[4] == "4"); Debug.Assert(parse2[5] == "5"); Debug.Assert(parse2[6] == "6"); Debug.Assert(parse2[7] == "7"); Debug.Assert(parse2[8] == "8"); Debug.Assert(parse2[9] == "9"); Debug.Assert(parse2[10] == "0"); Debug.Assert(parse2[11] == "."); Debug.Assert(parse2[12] == "1"); Debug.Assert(parse2[13] == "2"); Debug.Assert(parse2[14] == "3"); var parse3 = set.ParseSymbols("-1234567890.123", false, true); Debug.Assert(parse3[14] == "-"); Debug.Assert(parse3[13] == "1"); Debug.Assert(parse3[12] == "2"); Debug.Assert(parse3[11] == "3"); Debug.Assert(parse3[10] == "4"); Debug.Assert(parse3[9] == "5"); Debug.Assert(parse3[8] == "6"); Debug.Assert(parse3[7] == "7"); Debug.Assert(parse3[6] == "8"); Debug.Assert(parse3[5] == "9"); Debug.Assert(parse3[4] == "0"); Debug.Assert(parse3[3] == "."); Debug.Assert(parse3[2] == "1"); Debug.Assert(parse3[1] == "2"); Debug.Assert(parse3[0] == "3"); try { var parse4 = set.ParseSymbols("x-1234567890.123", false, false); } catch { } var digit = set.GetSymbolicDigit("0"); Debug.Assert(digit.Symbol.Equals(set.ZeroSymbol)); var s = digit.AddOne(); Debug.Assert(!s); Debug.Assert(digit.Symbol == "1"); digit.AddOne(); Debug.Assert(digit.Symbol == "2"); s = digit.Add("9"); Debug.Assert(digit.Symbol == "1"); Debug.Assert(s); digit.Subtract("1"); Debug.Assert(digit.Symbol == "0"); s = digit.Subtract("1"); Debug.Assert(digit.Symbol == "9"); Debug.Assert(s); }