public void PieceSubtraction1() { var p = Piece.Interval(new ComplexNumber(-1, -1), new ComplexNumber(2, 2)).AsInterval().SetLeftClosed(true, true).SetRightClosed(true, true); var left = PieceFunctions.Subtract(p, new OneElementPiece(0)); Assert.IsFalse(In(0, left)); }
internal void AddPiece(Piece piece) { if (FastAddingMode) { Pieces.Add(piece); return; } if (!piece.IsNumeric()) { if (Pieces.All(p => p != piece)) Pieces.Add(piece); return; } else if (this.Power == PowerLevel.FINITE && piece.Type == Piece.PieceType.ENTITY) { var evaled = (piece as OneElementPiece).Evaluated; if (Pieces.Select(p => (p as OneElementPiece).Evaluated).All(p => p != evaled)) Pieces.Add(piece); return; } var remainders = new List<Piece>{ piece }; foreach (var p in Pieces) { if (!p.IsNumeric()) continue; var newRemainders = new List<Piece>(); foreach (var rem in remainders) newRemainders.AddRange(PieceFunctions.Subtract(rem, p)); remainders = newRemainders; } Pieces.AddRange(remainders); }
public void PieceInversion1() { var p = Piece.Interval(3, 5).AsInterval().SetLeftClosed(true).SetRightClosed(true); var inverted = PieceFunctions.Invert(p); Assert.IsFalse(In(3, inverted)); }
public void PieceInversion2() { var p = Piece.Interval(new ComplexNumber(1, 1), new ComplexNumber(2, 2)).AsInterval().SetLeftClosed(true, true).SetRightClosed(true, true); var inverted = PieceFunctions.Invert(p); Assert.IsTrue(In(120, inverted)); Assert.IsTrue(In(new ComplexNumber(320, -13), inverted)); }
public void PieceIntersection1() { var p = Piece.Interval(3, 4).AsInterval().SetLeftClosed(true).SetRightClosed(true); var p1 = Piece.Interval(3.5, 4.5).AsInterval().SetLeftClosed(true).SetRightClosed(true); var p2 = Piece.Interval(3.5, 4).AsInterval().SetLeftClosed(true).SetRightClosed(true); var ints = PieceFunctions.Intersect(p, p1); Assert.IsTrue(ints == p2, ints + " instead of " + p2); }
public void PieceIntersection3() { var p = Piece.Interval(3, 7).AsInterval().SetLeftClosed(true).SetRightClosed(true); var p1 = Piece.Interval(1, 4).AsInterval().SetLeftClosed(true).SetRightClosed(true); var p2 = PieceFunctions.Intersect(p, p1); var p3 = Piece.Interval(3, 4).AsInterval().SetLeftClosed(true).SetRightClosed(true); Assert.IsTrue(p2 == p3); }
public void PieceSubtraction2() { // [3; 4] var p = Piece.Interval(3, 4).AsInterval().SetLeftClosed(true).SetRightClosed(true); // [3; 4) var p1 = Piece.Interval(3, 4).AsInterval().SetLeftClosed(true).SetRightClosed(false); var left = PieceFunctions.Subtract(p, p1); Assert.IsTrue(In(4, left)); Assert.IsFalse(In(5, left)); Assert.IsFalse(In(3.99, left)); }
public override bool Contains(Piece piece) { // we will subtract each this.piece from piece and if piece finally becomes 0 then // there is no point outside this set var remainders = new List<Piece>{ piece }; foreach (var p in this.Pieces) { var newRemainders = new List<Piece>(); foreach (var rem in remainders) newRemainders.AddRange(PieceFunctions.Subtract(rem, p)); remainders = newRemainders; } return remainders.Count == 0; }