예제 #1
0
 private void MkExprPred(BDD moveCond, out Expr chExpr, out Expr chPred)
 {
     if (css.ComputeDomainSize(moveCond) == 1)
     {
         var ch = (char)css.Choose(moveCond);
         chExpr = stb.Solver.MkCharExpr(ch);
         chPred = stb.Solver.MkCharConstraint(ch);
     }
     else if (css.ComputeDomainSize(css.MkNot(moveCond)) == 1)
     {
         var ch = (char)css.Choose(css.MkNot(moveCond));
         chExpr = stb.MkInputVariable(stb.Solver.CharSort);
         chPred = stb.Solver.MkNot(stb.Solver.MkCharConstraint(ch));
     }
     else if (css.ComputeDomainSize(moveCond) == 2)
     {
         var ch1 = (char)css.GetMin(moveCond);
         var ch2 = css.GetMax(moveCond);
         chExpr = stb.MkInputVariable(stb.Solver.CharSort);
         chPred = stb.Solver.MkOr(stb.Solver.MkCharConstraint(ch1), stb.Solver.MkCharConstraint(ch2));
     }
     else if (css.ComputeDomainSize(css.MkNot(moveCond)) == 2)
     {
         var ch1 = (char)css.GetMin(css.MkNot(moveCond));
         var ch2 = css.GetMax(css.MkNot(moveCond));
         chExpr = stb.MkInputVariable(stb.Solver.CharSort);
         chPred = stb.Solver.MkAnd(stb.Solver.MkNot(stb.Solver.MkCharConstraint(ch1)),
                                   stb.Solver.MkNot(stb.Solver.MkCharConstraint(ch2)));
     }
     else
     {
         var ranges = css.ToRanges(moveCond);
         chPred = stb.Solver.MkRangesConstraint(false, Array.ConvertAll(ranges, r => new char[] { (char)r.Item1, (char)r.Item2 }));
         chExpr = stb.MkInputVariable(stb.Solver.CharSort);
     }
 }
예제 #2
0
        public void MinMaxTest()
        {
            CharSetSolver solver = new CharSetSolver(BitWidth.BV16);
            var           ranges = new char[][] {
                new char[] { '\u55A0', '\u55AA' },
                new char[] { 'a', 'c' },
                new char[] { '\u5555', '\u55A5' },
                new char[] { 'e', 'h' }
            };
            BDD  s = solver.MkRangesConstraint(false, ranges);
            char c = solver.GetMax(s);

            Assert.AreEqual <char>('\u55AA', c, "not the maximum character");
            c = (char)solver.GetMin(s);
            Assert.AreEqual <char>('a', c, "not the minimum character");
        }
예제 #3
0
 public void MinMaxTest()
 {
     CharSetSolver solver = new CharSetSolver(BitWidth.BV16);
     var ranges = new char[][] {
         new char[] {'\u55A0', '\u55AA'},
         new char[] { 'a', 'c' },
         new char[] {'\u5555', '\u55A5'},
         new char[] { 'e', 'h' }
     };
     BDD s = solver.MkRangesConstraint(false, ranges);
     char c = solver.GetMax(s);
     Assert.AreEqual<char>('\u55AA', c, "not the maximum character");
     c = (char)solver.GetMin(s);
     Assert.AreEqual<char>('a', c, "not the minimum character");
 }