/// <summary> Creates an AST builder which contains solely the binary or operator. </summary> ///<param name="binder"> Will contain a name inferrer that is capable of inferring the or operator and all specified boolean names. </param> /// <param name="booleanNames"> The names of variables which will be recognized by the yielded name instance binder. </param> private static AbstractSyntaxTreeBuilder<Binding, TDomain> CreateASTBuilderWithOrNotation(out NameInstanceNameInferrer binder, params char[] booleanNames) { Name orName; var result = CreateASTBuilderWithOrNotation(out orName); binder = new NameInstanceNameInferrer(booleanNames.Select(CreateBoolean).Concat(orName).ToReadOnlyList()); return result; }
public void ASub2FailTest() { //tests that a_2 is not matched by a^2 var treeLeafA = new AtomicNameInstance('a', new AbsoluteScriptPosition()); var treeLeafA2 = new AtomicNameInstance('2', new AbsoluteScriptPosition(Script.Sub/**********************/.ToSingleton())); var root = new CompositeNameInstance(new NameInstance[] { treeLeafA, treeLeafA2 }.ToList(), new LinearPosition(0)); treeLeafA.SetParent(root); treeLeafA2.SetParent(root); var inferrer = new NameInstanceNameInferrer(new[] { Notations.aSup2 }.ToReadOnlyList()); var result = inferrer.Match(root).ToList(); Contract.Assert(result.Count == 0); }
public void AToThePower2Test() { var treeLeafA = new AtomicNameInstance('a', new AbsoluteScriptPosition()); var treeLeafA2 = new AtomicNameInstance('2', new AbsoluteScriptPosition(Script.Super/********************/.ToSingleton())); var root = new CompositeNameInstance(new NameInstance[] { treeLeafA, treeLeafA2 }.ToList(), new LinearPosition(0)); treeLeafA.SetParent(root); treeLeafA2.SetParent(root); var inferrer = new NameInstanceNameInferrer(new[] { Notations.aSup2 }.ToReadOnlyList()); var result = inferrer.Match(root).ToList(); Contract.Assert(result.Count == 1); Contract.Assert(result[0].Count == 1); Contract.Assert((result[0][0].Binding.Name as Name).Notation == Notations.aSup2); Contract.Assert(result[0][0].Binding.Index == (LeafIndex)0); Contract.Assert(result[0][0].Occupation.SequenceEqual(new[] { true, true })); }
public void asososTest() { var a = new AtomicNameInstance('a', new LinearPosition(0)); var s = new AtomicNameInstance('s', new LinearPosition(1)); var o = new AtomicNameInstance('o', new LinearPosition(2)); var s_ = new AtomicNameInstance('s', new LinearPosition(3)); var o_ = new AtomicNameInstance('o', new LinearPosition(4)); var s__ = new AtomicNameInstance('s', new LinearPosition(5)); var root = new CompositeNameInstance(new NameInstance[] { a, s, o, s_, o_, s__ }.ToList(), new LinearPosition(0)); root.SetParent(null); var inferrer = new NameInstanceNameInferrer(new[] { Notations.sos, Notations.aso }.ToReadOnlyList()); var result = inferrer.Match(root).ToList(); Contract.Assert(result.Count == 1); Contract.Assert(result[0].Select(match => (match.Binding.Name as Name).Notation).ContainsSameElements(Notations.aso.Notation, Notations.sos.Notation)); Contract.Assert(result[0][result[0].IndexOf(match => (match.Binding.Name as Name).Notation == Notations.aso)].Binding.Index.Index == 0); Contract.Assert(result[0][result[0].IndexOf(match => (match.Binding.Name as Name).Notation == Notations.sos)].Binding.Index.Index == 3); }