public void TestCsAlgebra_Mk() { var css = new CharSetSolver(); var aA = css.MkCharConstraint('a', true); var a = css.MkCharConstraint('a', false); var b = css.MkCharConstraint('b'); var ab = css.MkOr(a, b); var csa = new CsAlgebra <BDD>(css, new ICounter[] { new BoundedCounter(0, 4, 5), new BoundedCounter(1, 4, 5), new BoundedCounter(2, 4, 5), }); var alpha = csa.MkPredicate(ab, true, CsCondition.TRUE, CsCondition.CANEXIT, CsCondition.TRUE); var alpha_cases = alpha.ToArray(); Assert.IsTrue(alpha_cases.Length == 1); Assert.IsTrue(alpha_cases[0].Item2.Equals(ab)); Assert.IsTrue(alpha_cases[0].Item1.Equals(CsConditionSeq.MkAND(CsCondition.TRUE, CsCondition.CANEXIT, CsCondition.TRUE))); var beta = csa.MkPredicate(aA, true, CsCondition.TRUE, CsCondition.CANLOOP, CsCondition.TRUE); var gamma = csa.MkAnd(alpha, beta); var res = new List <Tuple <CsConditionSeq, BDD> >(gamma.GetSumOfProducts()); Assert.IsTrue(res.Count == 1); var counter_cond = res[0].Item1; var input_pred = res[0].Item2; Assert.IsTrue(input_pred.Equals(a)); Assert.IsTrue(counter_cond[1] == CsCondition.MIDDLE); }