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); } }
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"); }
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"); }