public Set IntersectionSet(IntersectionExpression node, List <object> parameters) { Set leftSet = _interpreter.DispatchSet(node.Children[0], parameters); Set rightSet = _interpreter.DispatchSet(node.Children[1], parameters); HashSet <Element> set = leftSet.SetCopy; set.IntersectWith(rightSet.Elements); return(new Set(set)); }
public Set DispatchSet(ExpressionNode node, List <Object> parameters) { return(node switch { SetExpression e => _setHelper.SetExpression(e, parameters), UnionExpression e => _setHelper.UnionSet(e, parameters), IntersectionExpression e => _setHelper.IntersectionSet(e, parameters), SubtractionExpression e => _setHelper.SubtractionSet(e, parameters), IdentifierExpression e => _genericHelper.Identifier <Set>(e, parameters), FunctionCallExpression e => _genericHelper.FunctionCall <Set>(e, parameters), VerticesGraphField e => _setHelper.VerticesField(e, parameters), EdgesGraphField e => _setHelper.EdgesField(e, parameters), EmptySetLiteralExpression e => _setHelper.EmptySetLiteral(e, parameters), _ => throw new UnimplementedInterpreterException(node, "DispatctSet") });
public void IntersectionSet_ValidInput_ReturnsCorrectSet(Set left, Set right, Set exp) { IInterpreterSet parent = Substitute.For <IInterpreterSet>(); SetHelper setHelper = SetUpHelper(parent); SetExpression leftExpr = new SetExpression(null, null, null, 0, 0); SetExpression rightExpr = new SetExpression(null, null, null, 0, 0); IntersectionExpression intersectionExpr = new IntersectionExpression(leftExpr, rightExpr, 0, 0); parent.DispatchSet(leftExpr, Arg.Any <List <object> >()).Returns(left); parent.DispatchSet(rightExpr, Arg.Any <List <object> >()).Returns(right); Set result = setHelper.IntersectionSet(intersectionExpr, new List <object>()); result.Should().BeEquivalentTo(exp); }
public void Clone_ReturnsNewConcatenationInstanceWithSameValues() { var expression = Substitute.For <IExpression>(); var intersect = new IntersectionExpression(new List <IExpression> { expression }, _random) { RepeatRange = new IntegerInterval() }; intersect.RepeatRange.TrySetValue(1, 3); var result = intersect.Clone(); Assert.AreNotEqual(intersect, result); Assert.AreEqual(intersect.RepeatRange.Start, result.RepeatRange.Start); Assert.AreEqual(intersect.RepeatRange.End, result.RepeatRange.End); expression.Received(1).Clone(); }