Ejemplo n.º 1
0
        public void Merge_ShouldThrow_GivenInvalidRanges()
        {
            var intervalOne = new IntInterval(5, EndPoint <int> .Open(7));
            var intervalTwo = new IntInterval(8, 10);

            Assert.That(() => intervalOne.Merge(intervalTwo), Throws.InvalidOperationException);
        }
Ejemplo n.º 2
0
        public Solver(IntInterval horizon)
        {
            m_PropagationQueue = new PropagationQueueVar();
            m_IntObjective     = new IntObjective(this);

            Init(horizon);
        }
Ejemplo n.º 3
0
        public void Union()
        {
            IntInterval a = new IntInterval(-100, 50);
            IntInterval b = new IntInterval(-50, 100);

            Assert.AreEqual(new IntInterval(-100, 100), a.Union(b));
        }
Ejemplo n.º 4
0
        public void IntersectsDisjoint()
        {
            // simple overlap
            var a = new IntInterval(7, 42);
            var b = new IntInterval(10, 100);

            Assert.IsTrue(a.IntersectsWith(b));
            Assert.IsTrue(b.IntersectsWith(a));
            Assert.IsTrue(a.IntersectsWith(a));
            Assert.IsFalse(a.IsDisjointFrom(b));
            Assert.IsFalse(b.IsDisjointFrom(a));
            Assert.IsFalse(a.IsDisjointFrom(a));

            // "touching", inclusive
            var c = new IntInterval(42, 100);

            Assert.IsTrue(a.IntersectsWith(c));
            Assert.IsTrue(c.IntersectsWith(a));
            Assert.IsFalse(a.IsDisjointFrom(c));
            Assert.IsFalse(c.IsDisjointFrom(a));

            // "touching", but non-inclusive
            var d = new IntInterval(42, false, 100, true);

            Assert.IsFalse(a.IntersectsWith(d));
            Assert.IsFalse(d.IntersectsWith(a));
            Assert.IsTrue(a.IsDisjointFrom(d));
            Assert.IsTrue(d.IsDisjointFrom(a));
            var e = new IntInterval(0, true, 7, false);

            Assert.IsFalse(a.IntersectsWith(e));
            Assert.IsFalse(e.IntersectsWith(a));
            Assert.IsTrue(a.IsDisjointFrom(e));
            Assert.IsTrue(e.IsDisjointFrom(a));

            // simple disjoint
            var f = new IntInterval(0, 3);

            Assert.IsFalse(a.IntersectsWith(f));
            Assert.IsFalse(f.IntersectsWith(a));
            Assert.IsTrue(a.IsDisjointFrom(f));
            Assert.IsTrue(f.IsDisjointFrom(a));

            // negative interval
            var g = new IntInterval(8, 0);

            Assert.IsTrue(a.IntersectsWith(g));
            Assert.IsTrue(g.IntersectsWith(a));
            Assert.IsFalse(a.IsDisjointFrom(g));
            Assert.IsFalse(g.IsDisjointFrom(a));

            // containment
            var h = new IntInterval(7, 42);
            var i = new IntInterval(10, 40);

            Assert.IsTrue(h.IntersectsWith(i));
            Assert.IsTrue(i.IntersectsWith(h));
            Assert.IsFalse(h.IsDisjointFrom(i));
            Assert.IsFalse(i.IsDisjointFrom(h));
        }
Ejemplo n.º 5
0
 private static CharRange MakeCharRange(IntInterval interval)
 {
     checked
     {
         return(new CharRange((char)interval.First, (char)interval.Last));
     }
 }
Ejemplo n.º 6
0
        public void WhenBoundsCoverMultipleArrowsEnumerateCoverage()
        {
            var target = new MutableIntMap <double>();

            target.DefaultValue = D;
            target.Set(new IntArrow <double>(0, 5, X));
            target.Set(new IntArrow <double>(9, 9, Y));
            target.Set(new IntArrow <double>(11, 14, Z));
            target.Set(new IntArrow <double>(20, 25, Y));

            var bounds = new IntInterval(3, 22);

            var expected = new[]
            {
                new IntArrow <double>(3, 5, X),
                new IntArrow <double>(6, 8, D),
                new IntArrow <double>(9, 9, Y),
                new IntArrow <double>(10, 10, D),
                new IntArrow <double>(11, 14, Z),
                new IntArrow <double>(15, 19, D),
                new IntArrow <double>(20, 22, Y),
            };

            var got = target.EnumerateCoverage(bounds).ToArray();

            Assert.AreEqual(expected, got);
        }
Ejemplo n.º 7
0
        public void Addition()
        {
            IntInterval a = new IntInterval(-10, 5);
            IntInterval b = new IntInterval(-5, 10);

            Assert.AreEqual(new IntInterval(-15, 15), a + b);
        }
        public EmitSyntax Build(EmitSyntax emit)
        {
            int rows    = table.RowCount;
            int columns = table.ColumnCount;

            Ref <Labels> END = emit.Labels.Generate().GetRef();

            Ref <Labels>[] labels = new Ref <Labels> [rows];
            for (int i = 0; i != rows; ++i)
            {
                labels[i] = emit.Labels.Generate().GetRef();
            }

            emit
            .Do(LdRow)
            .Switch(labels)
            .Ldc_I4(-1)
            .Br(END)
            ;

            var columnRange     = new IntInterval(0, columns - 1);
            var columnFrequency = new UniformIntFrequency(columnRange);

            for (int i = 0; i != rows; ++i)
            {
                var switchEmitter = SwitchGenerator.Sparse(table.GetRow(i), columnRange, columnFrequency);

                emit.Label(labels[i].Def);
                switchEmitter.Build(emit, LdCol, SwitchGenerator.LdValueAction(END));
            }

            return(emit.Label(END.Def));
        }
Ejemplo n.º 9
0
        public void Addition()
        {
            IntInterval a	= new IntInterval( -10, 5 );
            IntInterval b	= new IntInterval( -5, 10 );

            Assert.AreEqual( new IntInterval( -15, 15 ), a + b );
        }
Ejemplo n.º 10
0
        public void Substraction()
        {
            IntInterval a = new IntInterval(-10, 5);
            IntInterval b = new IntInterval(-5, 10);

            Assert.AreEqual(new IntInterval(-20, 10), a - b);
        }
Ejemplo n.º 11
0
        public void Difference3()
        {
            IntInterval a = new IntInterval(-100, 100);
            IntInterval b = new IntInterval(-150, 150);

            Assert.AreEqual(IntInterval.Empty, a.Difference(b));
        }
Ejemplo n.º 12
0
        public void Difference4()
        {
            IntInterval a = new IntInterval(-100, 100);
            IntInterval b = new IntInterval(-50, 50);

            Assert.AreEqual(new IntInterval(-100, 100), a.Difference(b));
        }
Ejemplo n.º 13
0
 public void Difference25()
 {
     IntInterval a	= new IntInterval( -100, 100 );
     IntInterval b	= new IntInterval( -150, -50 );
     IntInterval c	= new IntInterval( 50, 150 );
     Assert.AreEqual( new IntInterval( -49, 100 ), a.Difference( b ) );
     Assert.AreEqual( new IntInterval( -100, 49 ), a.Difference( c ) );
 }
Ejemplo n.º 14
0
        public void Negate()
        {
            IntInterval a = new IntInterval(-10, 5);
            IntInterval b = new IntInterval(-5, 10);

            Assert.AreEqual(new IntInterval(-5, 10), -a);
            Assert.AreEqual(new IntInterval(-10, 5), -b);
        }
Ejemplo n.º 15
0
        public void Intersect25()
        {
            IntInterval a = new IntInterval(-100, 50);
            IntInterval b = new IntInterval(-50, 100);

            Assert.AreEqual(new IntInterval(-50, 50), a.Intersect(b));
            Assert.AreEqual(new IntInterval(-50, 50), b.Intersect(a));
        }
Ejemplo n.º 16
0
        public void ContainsInterval()
        {
            IntInterval a	= new IntInterval( -100, 100 );
            IntInterval b	= new IntInterval( -50, 50 );

            Assert.IsTrue( a.Contains( a ) );
            Assert.IsTrue( a.Contains( b ) );
            Assert.IsFalse( b.Contains( a ) );
        }
Ejemplo n.º 17
0
        public void Negative()
        {
            var pos = new IntInterval(7, 42);

            Assert.IsFalse(pos.IsNegative);
            var neg = new IntInterval(42, 7);

            Assert.IsFalse(pos.IsNegative);
        }
Ejemplo n.º 18
0
 public SectionInfo
     (string sectionName, IEnumerable <string> section, IEnumerable <string> body, IntInterval sectionLocation, IntInterval sectionBodyLocation)
 {
     Section             = new Section(sectionName);
     FullSection         = section;
     Body                = body;
     SectionLocation     = sectionLocation;
     SectionBodyLocation = sectionBodyLocation;
 }
Ejemplo n.º 19
0
        public void Difference25()
        {
            IntInterval a = new IntInterval(-100, 100);
            IntInterval b = new IntInterval(-150, -50);
            IntInterval c = new IntInterval(50, 150);

            Assert.AreEqual(new IntInterval(-49, 100), a.Difference(b));
            Assert.AreEqual(new IntInterval(-100, 49), a.Difference(c));
        }
Ejemplo n.º 20
0
        public void Intersect16()
        {
            IntInterval a = new IntInterval(-150, -100);
            IntInterval b = new IntInterval(-50, 50);
            IntInterval c = new IntInterval(100, 150);

            Assert.AreEqual(IntInterval.Empty, b.Intersect(a));
            Assert.AreEqual(IntInterval.Empty, b.Intersect(c));
        }
Ejemplo n.º 21
0
        public static SwitchGenerator Sparse(
            IIntMap <int> arrows,
            IntInterval possibleBounds,
            IIntFrequency frequency = null)
        {
            var result = new SparseSwitchGenerator(arrows, possibleBounds, frequency);

            return(result);
        }
Ejemplo n.º 22
0
        public void Merge_ShouldReturnIntInterval()
        {
            var intervalOne = new IntInterval(5, 7);
            var intervalTwo = new IntInterval(7, 10);

            var result = intervalOne.Merge(intervalTwo);

            Assert.That(result, Is.TypeOf <IntInterval>());
        }
Ejemplo n.º 23
0
 private void WriteInterval(IntInterval interval)
 {
     WriteChar(interval.First);
     if (interval.First != interval.Last)
     {
         writer.Write("..");
         WriteChar(interval.Last);
     }
 }
Ejemplo n.º 24
0
        public void ContainsInterval()
        {
            IntInterval a = new IntInterval(-100, 100);
            IntInterval b = new IntInterval(-50, 50);

            Assert.IsTrue(a.Contains(a));
            Assert.IsTrue(a.Contains(b));
            Assert.IsFalse(b.Contains(a));
        }
Ejemplo n.º 25
0
        public void ContainsValue()
        {
            IntInterval i = new IntInterval(-100, 100);

            Assert.IsFalse(i.Contains(-101));
            Assert.IsTrue(i.Contains(-100));
            Assert.IsTrue(i.Contains(0));
            Assert.IsTrue(i.Contains(100));
            Assert.IsFalse(i.Contains(101));
        }
Ejemplo n.º 26
0
 public SparseSwitchGenerator(
     IIntMap <int> intMap,
     IntInterval possibleBounds,
     IIntFrequency frequency)
 {
     this.strategy       = new InlineFirstDTStrategy(this);
     this.intMap         = intMap;
     this.possibleBounds = possibleBounds;
     this.frequency      = frequency ?? new UniformIntFrequency(possibleBounds);
 }
Ejemplo n.º 27
0
        public static SwitchGenerator Sparse(
            IntArrow <int>[] intervalToValue,
            int defaultValue,
            IntInterval possibleBounds,
            IIntFrequency frequency = null)
        {
            var result = new SparseSwitchGenerator(intervalToValue, defaultValue, possibleBounds, frequency);

            return(result);
        }
Ejemplo n.º 28
0
        public void ContainsValue()
        {
            IntInterval i	= new IntInterval( -100, 100 );

            Assert.IsFalse( i.Contains( -101 ) );
            Assert.IsTrue( i.Contains( -100 ) );
            Assert.IsTrue( i.Contains( 0 ) );
            Assert.IsTrue( i.Contains( 100 ) );
            Assert.IsFalse( i.Contains( 101 ) );
        }
Ejemplo n.º 29
0
        public void TestIntervalPosition(IntInterval interval, int value)
        {
            int first = interval.First;
            int last  = interval.Last;

            checked
            {
                IntIntervalPosition position = interval.PositionOf(value);
                switch (position)
                {
                case IntIntervalPosition.Less:
                    Assert.Less(value, first);
                    break;

                case IntIntervalPosition.First:
                    Assert.AreEqual(value, first);
                    break;

                case IntIntervalPosition.StrictlyInside:
                    Assert.IsTrue(last > value && value > first);
                    break;

                case IntIntervalPosition.Last:
                    Assert.AreEqual(value, last);
                    break;

                case IntIntervalPosition.Greater:
                    Assert.Greater(value, last);
                    break;

                case IntIntervalPosition.Undefined:
                    Assert.IsTrue(interval.IsEmpty);
                    break;

                default:
                    Assert.Fail("Invalid interval position result");
                    break;
                }

                if (position != IntIntervalPosition.Undefined)
                {
                    Assert.AreEqual(
                        last >= value && value >= first,
                        (position & IntIntervalPosition.InsideMask) != 0);

                    Assert.AreEqual(
                        last < value || value < first,
                        (position & IntIntervalPosition.OutsideMask) != 0);

                    Assert.AreEqual(
                        last == value || value == first,
                        (position & IntIntervalPosition.EdgeMask) != 0);
                }
            }
        }
Ejemplo n.º 30
0
        public void Equals()
        {
            IntInterval i = new IntInterval(-100, 100);
            IntInterval a = new IntInterval(-100, 100);
            IntInterval b = new IntInterval(-99, 100);
            IntInterval c = new IntInterval(-100, 99);

            Assert.IsTrue(i.Equals(a));
            Assert.IsFalse(i.Equals(b));
            Assert.IsFalse(i.Equals(c));
        }
Ejemplo n.º 31
0
        public void Equals()
        {
            IntInterval i	= new IntInterval( -100, 100 );
            IntInterval a	= new IntInterval( -100, 100 );
            IntInterval b	= new IntInterval( -99, 100 );
            IntInterval c	= new IntInterval( -100, 99 );

            Assert.IsTrue( i.Equals( a ) );
            Assert.IsFalse( i.Equals( b ) );
            Assert.IsFalse( i.Equals( c ) );
        }
Ejemplo n.º 32
0
 public SparseSwitchGenerator(
     IntArrow <int>[] intArrows,
     int defaultValue,
     IntInterval possibleBounds,
     IIntFrequency frequency = null)
     : this(
         new MutableIntMap <int>(intArrows, defaultValue),
         possibleBounds,
         frequency)
 {
 }
Ejemplo n.º 33
0
        public void Merge_ShouldMerge()
        {
            var intervalOne = new IntInterval(5, 7);
            var intervalTwo = new IntInterval(8, 10);

            var result = intervalOne.Merge(intervalTwo);

            var expected = new IntInterval(5, 10);

            Assert.That(result, Is.EqualTo(expected));
        }
Ejemplo n.º 34
0
        public double Sum(IntInterval bounds)
        {
            double sum = 0;

            foreach (var arrow in EnumerateCoverage(bounds))
            {
                sum += arrow.Value * arrow.Key.LongSize;
            }

            return(sum);
        }
Ejemplo n.º 35
0
        public void IntIntervalCoverage()
        {
            var a = new IntInterval(7, 42);
            var b = new IntInterval(40, 50);
            var c = new IntInterval(200, 100); // negative
            var e = IntInterval.Empty;

            var empty  = IntInterval.Coverage(new IntInterval[] { });
            var single = IntInterval.Coverage(new IntInterval[] { a });
            var ab     = IntInterval.Coverage(new IntInterval[] { a, b });
            var ba     = IntInterval.Coverage(new IntInterval[] { b, a });
            var ac     = IntInterval.Coverage(new IntInterval[] { a, c });
            var ca     = IntInterval.Coverage(new IntInterval[] { c, a });
            var ae     = IntInterval.Coverage(new IntInterval[] { a, e });
            var ea     = IntInterval.Coverage(new IntInterval[] { e, a });
            var bc     = IntInterval.Coverage(new IntInterval[] { b, c });
            var cb     = IntInterval.Coverage(new IntInterval[] { c, b });
            var be     = IntInterval.Coverage(new IntInterval[] { b, e });
            var eb     = IntInterval.Coverage(new IntInterval[] { e, b });
            var ce     = IntInterval.Coverage(new IntInterval[] { c, e });
            var ec     = IntInterval.Coverage(new IntInterval[] { e, c });

            Assert.IsTrue(c.IsNegative);
            Assert.AreEqual(0, empty.Right);
            Assert.AreEqual(0, empty.Left);
            Assert.AreEqual(a.Left, single.Left);
            Assert.AreEqual(a.Right, single.Right);
            Assert.AreEqual(ab.Left, a.Left);
            Assert.AreEqual(ab.Right, b.Right);
            Assert.AreEqual(ba.Left, a.Left);
            Assert.AreEqual(ba.Right, b.Right);
            Assert.AreEqual(ac.Left, a.Left);
            Assert.AreEqual(ac.Right, c.Left); // c is negative
            Assert.AreEqual(ae.Left, a.Left);
            Assert.AreEqual(ae.Right, a.Right);
            Assert.AreEqual(ea.Left, a.Left);
            Assert.AreEqual(ea.Right, a.Right);
            Assert.AreEqual(ca.Left, a.Left);
            Assert.AreEqual(ca.Right, c.Left); // c is negative
            Assert.AreEqual(bc.Left, b.Left);
            Assert.AreEqual(bc.Right, c.Left); // c is negative
            Assert.AreEqual(cb.Left, b.Left);
            Assert.AreEqual(cb.Right, c.Left); // c is negative
            Assert.AreEqual(be.Left, b.Left);
            Assert.AreEqual(be.Right, b.Right);
            Assert.AreEqual(eb.Left, b.Left);
            Assert.AreEqual(eb.Right, b.Right);
            Assert.AreEqual(ce.Left, c.Right);                                    // c is negative
            Assert.AreEqual(ec.Right, c.Left);                                    // c is negative
            Assert.IsTrue(IntInterval.Coverage(new IntInterval[] { }).IsEmpty);   // empty sequence -> empty interval
            Assert.IsTrue(IntInterval.Coverage(new IntInterval[] { e }).IsEmpty); // sequence of only empty intervals -> empty interval
        }
Ejemplo n.º 36
0
        public void Substraction()
        {
            IntInterval a	= new IntInterval( -10, 5 );
            IntInterval b	= new IntInterval( -5, 10 );

            Assert.AreEqual( new IntInterval( -20, 10 ), a - b );
        }
Ejemplo n.º 37
0
        public void IntersectsWith()
        {
            IntInterval a0	= new IntInterval( -100, -51 );
            IntInterval a	= new IntInterval( -100, -50 );
            IntInterval b	= new IntInterval( -50, 50 );
            IntInterval c	= new IntInterval( 50, 100 );
            IntInterval c0	= new IntInterval( 51, 100 );

            Assert.IsFalse( a0.IntersectsWith( b ) );
            Assert.IsFalse( b.IntersectsWith( a0 ) );
            Assert.IsFalse( b.IntersectsWith( c0 ) );
            Assert.IsFalse( c0.IntersectsWith( b ) );

            Assert.IsTrue( a.IntersectsWith( b ) );
            Assert.IsTrue( b.IntersectsWith( a ) );
            Assert.IsTrue( b.IntersectsWith( c ) );
            Assert.IsTrue( c.IntersectsWith( b ) );
        }
Ejemplo n.º 38
0
 public void Difference4()
 {
     IntInterval a	= new IntInterval( -100, 100 );
     IntInterval b	= new IntInterval( -50, 50 );
     Assert.AreEqual( new IntInterval( -100, 100 ), a.Difference( b ) );
 }
Ejemplo n.º 39
0
 public IntVarMatrix( Solver solver, int rowCount, int colCount, IntInterval interval )
     : this(solver, rowCount, colCount, new IntDomain( interval ))
 {
 }
Ejemplo n.º 40
0
 public DecisionTest(IntInterval interval, int action, double elementProbability)
 {
     Interval    = interval;
     Probability = elementProbability * Interval.LongSize;
     Action      = action;
 }
Ejemplo n.º 41
0
 public void Intersect16()
 {
     IntInterval a	= new IntInterval( -150, -100 );
     IntInterval b	= new IntInterval( -50, 50 );
     IntInterval c	= new IntInterval( 100, 150 );
     Assert.AreEqual( IntInterval.Empty, b.Intersect( a ) );
     Assert.AreEqual( IntInterval.Empty, b.Intersect( c ) );
 }
Ejemplo n.º 42
0
        public void Multiply()
        {
            IntInterval a	= new IntInterval( -10, -5 );
            IntInterval b	= new IntInterval( -10, 5 );
            IntInterval c	= new IntInterval( -5, 10 );
            IntInterval d	= new IntInterval( 5, 10 );

            Assert.AreEqual( new IntInterval( 25, 100 ), a * a );
            Assert.AreEqual( new IntInterval( -50, 100 ), a * b );
            Assert.AreEqual( new IntInterval( -100, 50 ), a * c );
            Assert.AreEqual( new IntInterval( -100, -25 ), a * d );

            Assert.AreEqual( new IntInterval( -50, 100 ), b * b );
            Assert.AreEqual( new IntInterval( -100, 50 ), b * c );
            Assert.AreEqual( new IntInterval( -100, 50 ), b * d );

            Assert.AreEqual( new IntInterval( -50, 100 ), c * c );
            Assert.AreEqual( new IntInterval( -50, 100 ), c * d );

            Assert.AreEqual( new IntInterval( 25, 100 ), d * d );
        }
Ejemplo n.º 43
0
        public void Negate()
        {
            IntInterval a	= new IntInterval( -10, 5 );
            IntInterval b	= new IntInterval( -5, 10 );

            Assert.AreEqual( new IntInterval( -5, 10 ), -a );
            Assert.AreEqual( new IntInterval( -10, 5 ), -b );
        }
Ejemplo n.º 44
0
 public void Difference3()
 {
     IntInterval a	= new IntInterval( -100, 100 );
     IntInterval b	= new IntInterval( -150, 150 );
     Assert.AreEqual( IntInterval.Empty, a.Difference( b ) );
 }
Ejemplo n.º 45
0
 public Problem( IntInterval horizon )
 {
     m_Solver	= new Solver( horizon );
 }
Ejemplo n.º 46
0
 public void Union()
 {
     IntInterval a	= new IntInterval( -100, 50 );
     IntInterval b	= new IntInterval( -50, 100 );
     Assert.AreEqual( new IntInterval( -100, 100 ), a.Union( b ) );
 }
Ejemplo n.º 47
0
        public Solver( IntInterval horizon )
        {
            m_PropagationQueue	= new PropagationQueueVar();
            m_IntObjective		= new IntObjective( this );

            Init( horizon );
        }
Ejemplo n.º 48
0
        private void Init( IntInterval horizon )
        {
            m_Horizon			= horizon;

            m_VarList			= new List<Variable>();
            m_IntVarList		= new List<IntVar>();
            m_FltVarList		= new List<FltVar>();
            m_ConstraintList	= new List<Constraint>();

            m_StateStack		= new StateStack();
            m_GoalStack			= new GoalStack( m_IntObjective );

            m_Out				= Console.Out;
            m_Time				= DateTime.Now;
        }
Ejemplo n.º 49
0
 public void Intersect25()
 {
     IntInterval a	= new IntInterval( -100, 50 );
     IntInterval b	= new IntInterval( -50, 100 );
     Assert.AreEqual( new IntInterval( -50, 50 ), a.Intersect( b ) );
     Assert.AreEqual( new IntInterval( -50, 50 ), b.Intersect( a ) );
 }