#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)); }
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')); }
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); }
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')); }