Esempio n. 1
0
#pragma warning restore IDE0022 // Use expression body for methods

        static char Next(string vars, char next)
        {
            var e    = ExprExtractor.GetExpression(vars).Single();
            var uniq = new UniqVariable(e);

            return(uniq.Next(next));
        }
Esempio n. 2
0
        public void State()
        {
            var uniq = new UniqVariable(ExprExtractor.GetExpression("c").Single());

            Assert.AreEqual('b', uniq.Next('b'));
            Assert.AreEqual('a', uniq.Next('b'));
            Assert.AreEqual('d', uniq.Next('b'));
        }
Esempio n. 3
0
 public void Evaluate()
 {
     foreach (var e in expressions)
     {
         // e = X, solve for X
         var next = new UniqVariable(e).Next('X');
         var temp = new Func("=", e, new Character(next));
         if (TryResolveFact(temp, out var env, out var result) && env.TryGetValue(next, out var value))
         {
             // TODO decide if this logic could be avoided if top-level expressions didn't solve for X
             //  if (result.Children.Count > 0) {
             //  var solving = result.Children[0].Line;
             //  result.Children[0].Line = solving.Substring(0, solving.Length - 4) + "...";
             //}
             result.Line = value;
             results.Add(result);
         }
Esempio n. 4
0
        public void Errors()
        {
            var abcxyz = "abcdefghijklmnopqrstuvwxyz";

            Assert.ThrowsException <InvalidOperationException>(() => Next(abcxyz.ToUpper(), 'A'));
            Assert.ThrowsException <InvalidOperationException>(() => Next(abcxyz, 'a'));

            var bcxyz = abcxyz.Substring(1);
            var uniq  = new UniqVariable(ExprExtractor.GetExpression(bcxyz + abcxyz.ToUpper()).Single());

            Assert.AreEqual('a', uniq.Next('a'));
            Assert.ThrowsException <InvalidOperationException>(() => uniq.Next('a'));

            uniq = new UniqVariable(ExprExtractor.GetExpression(bcxyz).Single());
            Assert.AreEqual('a', uniq.Next('b'));
            Assert.ThrowsException <InvalidOperationException>(() => uniq.Next('a'));
        }