Example #1
0
        public void SingleRemove(int margin)
        {
            var i = new MappedInterval <Crate>(0, 100, MakeDummy(0));

            _sut.Put(new [] { i });

            _sut.Delete(i.IntervalStart - margin, i.IntervalEnd + margin);

            Assert.That(_sut.Count, Is.Zero);
        }
Example #2
0
        private void AddIntervals(params MappedInterval <Crate>[] intervals)
        {
            var box = new MappedInterval <Crate> [1];

            foreach (var i in intervals)
            {
                box[0] = i;
                _sut.Put(box);
            }
        }
Example #3
0
        public void Work()
        {
            var collection = Collection;
            var box        = new MappedInterval <TPayload> [1];

            for (var i = 0; i < _input.Length; ++i)
            {
                box[0] = _input[i];
                collection.Put(box);
            }
        }
 public Hueta(MappedInterval <T> interval, bool?isStart)
 {
     Interval = interval;
     if (isStart.HasValue)
     {
         IsStart = isStart.Value;
     }
     else
     {
         IsStart = null;
     }
 }
Example #5
0
        public static Tuple <long, long> Fill <TPayload>(Sorting sorting, Overlapping overlapping, TPayload filler, MappedInterval <TPayload>[] output)
        {
            var count    = output.Length;
            var start    = 0L;
            var duration = 10L;
            var step     = overlapping == Overlapping.Yes ? duration >> 1 : duration << 1;

            var min = long.MaxValue;
            var max = long.MinValue;

            switch (sorting)
            {
            case Sorting.Ascending:
            case Sorting.Descending:
            {
                var from  = sorting == Sorting.Ascending ? 0 : count - 1;
                var to    = sorting == Sorting.Ascending ? count : 0;
                var delta = sorting == Sorting.Ascending ? 1 : -1;

                while (from != to)
                {
                    min = Math.Min(min, start);
                    max = Math.Max(max, start + duration);

                    output[from] = new MappedInterval <TPayload>(start, start + duration, filler);
                    start       += step;
                    from        += delta;
                }

                break;
            }

            case Sorting.Random:
            {
                var durationFrom = (int)(duration - duration * 0.2);
                var durationTo   = (int)(duration + duration * 0.2);
                var r            = new Random(0xDEAD);
                for (var i = 0; i < count; ++i)
                {
                    var s = r.Next(0, int.MaxValue);
                    var d = r.Next(durationFrom, durationTo);
                    min       = Math.Min(min, s);
                    max       = Math.Max(max, s + d);
                    output[i] = new MappedInterval <TPayload>(s, s + d, filler);
                }

                break;
            }
            }

            return(Tuple.Create(min, max));
        }
Example #6
0
        public void Ascending(DataSource source, DataFilter filter)
        {
            var input = new MappedInterval <Crate> [10];

            DataGeneration.LikeReal(source, filter, MakeCrate, input);

            var whole = new Tuple <int, int> [1];

            whole[0] = Tuple.Create(0, input.Length);
            AddSeries(input, whole);

            CollectionAssert.AreEqual(_sut, input);
        }
Example #7
0
        private void AddSeries(IReadOnlyList <MappedInterval <Crate> > input, IReadOnlyList <Tuple <int, int> > ranges)
        {
            var box = new MappedInterval <Crate> [1];

            foreach (var range in ranges)
            {
                for (var i = range.Item1; i < range.Item2; ++i)
                {
                    box[0] = input[i];
                    _sut.Put(box);
                }
            }
        }
        protected void AddSeries(IReadOnlyList <MappedInterval <TPayload> > input, IReadOnlyList <Tuple <int, int> > ranges)
        {
            var collection = Collection;
            var box        = new MappedInterval <TPayload> [1];

            foreach (var range in ranges)
            {
                for (var i = range.Item1; i < range.Item2; ++i)
                {
                    box[0] = input[i];
                    collection.Put(box);
                }
            }
        }
Example #9
0
        public int Compare(MappedInterval <T> x, MappedInterval <T> y)
        {
            if (x.IntervalStart < y.IntervalStart && x.IntervalEnd <= y.IntervalStart)
            {
                return(-1);
            }

            if (y.IntervalStart < x.IntervalStart && y.IntervalEnd <= x.IntervalStart)
            {
                return(1);
            }

            return(0);
        }
Example #10
0
        public void RandomAscendingSeries(DataSource source, DataFilter filter)
        {
            var input = new MappedInterval <Crate> [10];

            DataGeneration.LikeReal(source, filter, MakeCrate, input);

            var preRanges = GeneratePartitions(input.Length).ToArray();
            var ranges    = new Tuple <int, int> [preRanges.Length];

            Shuffle(preRanges, ranges);

            AddSeries(input, ranges);

            CollectionAssert.AreEqual(_sut, input);
        }
        public void OverwritingUpdate()
        {
            var input = IntervalGeneration.Sequence(0, 10, 5, 5, MakeDummy).ToArray();

            var space = new MappedInterval <Crate> [1];

            foreach (var i in input)
            {
                space[0] = i;
                _sut.Put(space);
            }

            var output         = _sut.ToArray();
            var expectedOutput = IntervalGeneration.Sequence(0, 5, 5, input.Length - 1, i => input[i].Payload).Concat(input.Skip(input.Length - 1));

            CollectionAssert.AreEqual(expectedOutput, output);
        }
Example #12
0
        private static IEnumerable <MappedInterval <T> > Rebuild(IEnumerable <MappedInterval <T> > current, IEnumerable <MappedInterval <T> > addition)
        {
            var set = GhettoMergeSort(current, addition);

            MappedInterval <T>?pending = null;

            foreach (var i in set)
            {
                if (!pending.HasValue)
                {
                    pending = i;
                    continue;
                }

                if (i.Payload.Equals(pending.Value.Payload))
                {
                    if (pending.Value.IntervalEnd >= i.IntervalStart)
                    {
                        pending = new MappedInterval <T>(pending.Value.IntervalStart, i.IntervalEnd, i.Payload);
                        continue;
                    }

                    yield return(pending.Value);

                    pending = i;
                    continue;
                }

                if (pending.Value.IntervalEnd >= i.IntervalStart)
                {
                    yield return(new MappedInterval <T>(pending.Value.IntervalStart, i.IntervalStart, pending.Value.Payload));
                }
                else
                {
                    yield return(pending.Value);
                }

                pending = i;
            }

            if (pending.HasValue)
            {
                yield return(pending.Value);
            }
        }
Example #13
0
        public void RandomSeriesBatched(DataSource source, DataFilter filter)
        {
            var input = new MappedInterval <Crate> [10];

            DataGeneration.LikeReal(source, filter, MakeCrate, input);

            var preRanges = GeneratePartitions(input.Length).ToArray();
            var ranges    = new Tuple <int, int> [preRanges.Length];

            Shuffle(preRanges, ranges);

            foreach (var range in ranges)
            {
                _sut.Put(new ArraySegment <MappedInterval <Crate> >(input, range.Item1, range.Item2 - range.Item1));
            }

            CollectionAssert.AreEqual(_sut, input);
        }
Example #14
0
            private static void MakeSpacedIntervals <TPayload>(Description description, Func <int, TPayload> makePayload, MappedInterval <TPayload>[] output)
            {
                var r = new Random(0xBADDAD);

                var start = MakeGap();

                for (var i = 0; i < output.Length; ++i)
                {
                    start += MakeGap();
                    var duration = MakeInterval();
                    var from     = ToUsec(start);
                    var to       = from + duration;
                    output[i] = new MappedInterval <TPayload>(from, to, makePayload(i));
                }

                int MakeInterval() => r.Next(description.IntervalRange.Item1, description.IntervalRange.Item2);
                int MakeGap() => r.Next(description.GapRange.Item1, description.GapRange.Item2);
                long ToUsec(int msec) => msec * 1000 - r.Next(0, 3);
            }
Example #15
0
        public void PartialRemove()
        {
            var i = new MappedInterval <Crate>(0, 1000, MakeDummy(0));

            _sut.Put(new [] { i });

            var gapFrom = 100;
            var gapTo   = 400;

            _sut.Delete(gapFrom, gapTo);

            var output = _sut.ToArray();

            Assert.That(output.Length, Is.EqualTo(2));
            Assert.That(output[0].Payload.Value, Is.EqualTo(0));
            Assert.That(output[0].IntervalStart, Is.EqualTo(i.IntervalStart));
            Assert.That(output[0].IntervalEnd, Is.EqualTo(gapFrom));
            Assert.That(output[1].Payload.Value, Is.EqualTo(0));
            Assert.That(output[1].IntervalStart, Is.EqualTo(gapTo));
            Assert.That(output[1].IntervalEnd, Is.EqualTo(i.IntervalEnd));
        }
Example #16
0
        protected override void AfterCollectionCreation()
        {
            var dummy = new TPayload();
            var box   = new MappedInterval <TPayload> [1];

            switch (InitialState)
            {
            case PreDeleteState.OneBigInterval:
                box[0] = new MappedInterval <TPayload>(0, long.MaxValue, dummy);
                Collection.Put(box);
                break;

            case PreDeleteState.LotsOfSmallIntervals:
            case PreDeleteState.Random:
                var inputs  = new MappedInterval <TPayload> [Count];
                var sorting = InitialState == PreDeleteState.Random ? Sorting.Random : Sorting.Ascending;
                DataGeneration.Fill(sorting, Overlapping.No, dummy, inputs);
                Collection.Put(inputs);
                break;
            }

            base.AfterCollectionCreation();
        }
Example #17
0
        private static IEnumerable <MappedInterval <T> > GhettoMergeSort(IEnumerable <MappedInterval <T> > current, IEnumerable <MappedInterval <T> > addition)
        {
            using (var existingEnumerator = current.GetEnumerator())
                using (var addedEnumerator = addition.GetEnumerator())
                {
                    IEnumerator <MappedInterval <T> > tail;

                    MappedInterval <T>?existing = null;
                    MappedInterval <T>?added    = null;

                    while (true)
                    {
                        if (!existing.HasValue)
                        {
                            if (!existingEnumerator.MoveNext())
                            {
                                tail = addedEnumerator;
                                break;
                            }
                            existing = existingEnumerator.Current;
                        }

                        while (addedEnumerator.MoveNext())
                        {
                            added = addedEnumerator.Current;

                            if (added.Value.IntervalStart < existing.Value.IntervalStart)
                            {
                                yield return(added.Value);

                                added = null;
                                continue;
                            }
                            break;
                        }

                        yield return(existing.Value);

                        existing = null;

                        if (!added.HasValue)
                        {
                            tail = existingEnumerator;
                            break;
                        }

                        while (existingEnumerator.MoveNext())
                        {
                            existing = existingEnumerator.Current;
                            if (existing.Value.IntervalStart < added.Value.IntervalStart)
                            {
                                yield return(existing.Value);

                                existing = null;
                                continue;
                            }
                            break;
                        }

                        yield return(added.Value);

                        added = null;
                    }

                    while (tail.MoveNext())
                    {
                        yield return(tail.Current);
                    }
                }
        }
 private static bool AcceptNode <T>(MappedInterval <T> node, int from, int to)
 {
     return(node.IntervalEnd >= from && node.IntervalStart <= to);
 }