Exemple #1
0
        public void CouldMapValues()
        {
            var sm = new SortedMap <int, double>
            {
                { 1, 1 }
            };

            Series <int, double, Range <int, double, SortedMapCursor <int, double> > > s1;

            s1 = sm.After(1);
            // TODO see the monster signature!
            // try to swap Map with Range (or any CursorSeries) so that this signature could
            // be automatically reduced to just two step
            var m2 = s1.Map((x) => x + 1).After(1)
                     .Map((x) => x + 1).After(1).Map((x) => x + 1).After(1).Map((x) => x + 1)
                     .Map((x) => x + 1).After(1).Map((x) => x + 1).After(1).Map((x) => x + 1)
                     .Map((x) => x + 1).After(1).Map((x) => x + 1).After(1).Map((x) => x + 1)
                     .Map((x) => x + 1).After(1).Map((x) => x + 1).After(1).Map((x) => x + 1)
                     .Map((x) => x + 1).After(1).Map((x) => x + 1).After(1).Map((x) => x + 1)
                     .Map((x) => x + 1).After(1).Map((x) => x + 1).After(1).Map((x) => x + 1)
                     .Map((x) => x + 1).After(1).Map((x) => x + 1).After(1).Map((x) => x + 1);

            var map  = new MapValuesSeries <int, double, double, SortedMapCursor <int, double> >(sm.GetEnumerator(), i => i * 2);
            var map1 = new MapValuesSeries <int, double, double, MapValuesSeries <int, double, double, SortedMapCursor <int, double> > >(map, i => i * 2);
            var map2 = new MapValuesSeries <int, double, double, Cursor <int, double> >(new Cursor <int, double>(map.Range(0, Int32.MaxValue, true, true).GetEnumerator()), i => i * 2);
            var map3 = new MapValuesSeries <int, double, double, Cursor <int, double> >(new Cursor <int, double>(map.Range(2, Int32.MaxValue, true, true).GetEnumerator()), i => i * 2);

            Assert.AreEqual(2, map.First.Value);
            Assert.AreEqual(4, map1.First.Value);
            Assert.AreEqual(4, map2.First.Value);
            Assert.True(map3.IsEmpty);
        }
Exemple #2
0
 public static RangeSeries <TKey, TValue, MapValuesSeries <TKey, TSource, TValue, TCursor> > After <TKey, TSource, TValue, TCursor>(
     this MapValuesSeries <TKey, TSource, TValue, TCursor> series,
     TKey startKey, bool startInclusive = true)
     where TCursor : ICursor <TKey, TSource>
 {
     return(new RangeSeries <TKey, TValue, MapValuesSeries <TKey, TSource, TValue, TCursor> >(series,
                                                                                              new Opt <TKey>(startKey), Opt <TKey> .Missing, startInclusive, true));
 }
Exemple #3
0
 public static RangeSeries <TKey, TValue, MapValuesSeries <TKey, TSource, TValue, TCursor> > Range <TKey, TSource, TValue, TCursor>(
     this MapValuesSeries <TKey, TSource, TValue, TCursor> series,
     TKey startKey, TKey endKey, bool startInclusive = true, bool endInclusive = true)
     where TCursor : ICursor <TKey, TSource>
 {
     return(new RangeSeries <TKey, TValue, MapValuesSeries <TKey, TSource, TValue, TCursor> >(series,
                                                                                              new Opt <TKey>(startKey), new Opt <TKey>(endKey), startInclusive, endInclusive));
 }
Exemple #4
0
 public static RangeSeries <TKey, TValue, MapValuesSeries <TKey, TSource, TValue, TCursor> > Before <TKey, TSource, TValue, TCursor>(
     this MapValuesSeries <TKey, TSource, TValue, TCursor> series,
     TKey endKey, bool endInclusive = true)
     where TCursor : ICursor <TKey, TSource>
 {
     return(new RangeSeries <TKey, TValue, MapValuesSeries <TKey, TSource, TValue, TCursor> >(series,
                                                                                              Opt <TKey> .Missing, new Opt <TKey>(endKey), true, endInclusive));
 }
Exemple #5
0
        public void CouldMapValues()
        {
            var sm = new SortedMap <int, int>
            {
                { 1, 1 }
            };

            var map  = new MapValuesSeries <int, int, int, SortedMapCursor <int, int> >(sm, i => i * 2);
            var map1 = new MapValuesSeries <int, int, int, MapValuesSeries <int, int, int, SortedMapCursor <int, int> > >(map, i => i * 2);
            var map2 = new MapValuesSeries <int, int, int, ICursor <int, int> >(map.Range(0, Int32.MaxValue, true, true), i => i * 2);
            var map3 = new MapValuesSeries <int, int, int, ICursor <int, int> >(map.Range(2, Int32.MaxValue, true, true), i => i * 2);

            Assert.AreEqual(2, map.First.Value);
            Assert.AreEqual(4, map1.First.Value);
            Assert.AreEqual(4, map2.First.Value);
            Assert.True(map3.IsEmpty);
        }
Exemple #6
0
        public void CouldMapValuesBenchmark()
        {
            var sm    = new SortedMap <int, double>();
            var count = 10000000;

            sm.AddLast(0, 0);
            for (int i = 2; i < count; i++)
            {
                sm.AddLast(i, i);
            }

            for (int r = 0; r < 10; r++)
            {
                var sw = new Stopwatch();
                sw.Restart();
                var map  = new MapValuesSeries <int, double, double, SortedMapCursor <int, double> >(sm.GetEnumerator(), i => i * 2);
                var map2 = new MapValuesSeries <int, double, double, MapValuesSeries <int, double, double, SortedMapCursor <int, double> > >(map, i => i * 2);
                var sum  = 0.0;
                foreach (var kvp in map2)
                {
                    sum += kvp.Value;
                }
                sw.Stop();
                Assert.IsTrue(sum > 0);

                Console.WriteLine($"Mops {sw.MOPS(count)}");
            }

            //for (int r = 0; r < 10; r++)
            //{
            //    var sw = new Stopwatch();
            //    sw.Restart();
            //    var map = sm
            //        //.Select(x => new KeyValuePair<int, double>(x.Key, x.Value * 2))
            //        .Select(x => new KeyValuePair<int, double>(x.Key, x.Value * 2));
            //    var sum = 0.0;
            //    foreach (var kvp in map)
            //    {
            //        sum += kvp.Value;
            //    }
            //    sw.Stop();
            //    Assert.IsTrue(sum > 0);

            //    Console.WriteLine($"LINQ Mops {sw.MOPS(count)}");
            //}
        }
Exemple #7
0
        public void CouldMapValuesBenchmark()
        {
            var sm    = new SortedMap <int, int>();
            var count = 10000000;

            for (int i = 0; i < count; i++)
            {
                sm.AddLast(i, i);
            }

            for (int r = 0; r < 10; r++)
            {
                var sw = new Stopwatch();
                sw.Restart();
                var  map = new MapValuesSeries <int, int, int, SortedMapCursor <int, int> >(sm, i => i * 2);
                long sum = 0;
                foreach (var kvp in map)
                {
                    sum += kvp.Value;
                }
                sw.Stop();
                Assert.IsTrue(sum > 0);

                Console.WriteLine($"Mops {sw.MOPS(count)}");
            }

            for (int r = 0; r < 10; r++)
            {
                var sw = new Stopwatch();
                sw.Restart();
                var  map = sm.Select(x => new KeyValuePair <int, int>(x.Key, x.Value * 2));
                long sum = 0;
                foreach (var kvp in map)
                {
                    sum += kvp.Value;
                }
                sw.Stop();
                Assert.IsTrue(sum > 0);

                Console.WriteLine($"LINQ Mops {sw.MOPS(count)}");
            }
        }
 public static MapValuesSeries <TKey, TSource, TResult, TCursor> Map <TKey, TSource, TValue, TResult, TCursor>(
     this MapValuesSeries <TKey, TSource, TValue, TCursor> series, Func <TValue, TResult> selector)
     where TCursor : ICursor <TKey, TSource>
 {
     return(new MapValuesSeries <TKey, TSource, TResult, TCursor>(series._series, CoreUtils.CombineMaps(series._selector, selector)));
 }
Exemple #9
0
        public void CouldMapValuesBenchmarkArithmeticVsMapCursor()
        {
            var sm    = new SortedMap <int, double>();
            var count = 10000000;

            sm.AddLast(0, 0);
            for (int i = 2; i < count; i++)
            {
                sm.AddLast(i, i);
            }

            for (int r = 0; r < 10; r++)
            {
                var sw = new Stopwatch();

                {
                    sw.Restart();

                    var sum = 0.0;
                    foreach (var kvp in sm)
                    {
                        sum += kvp.Value;
                    }
                    sw.Stop();
                    Assert.IsTrue(sum > 0);
                    Console.WriteLine($"SortedMap {sw.MOPS(count)}");
                }

                {
                    sw.Restart();
                    var map =
                        new ArithmeticSeries <int, double, MultiplyOp <double>, SortedMapCursor <int, double> >(sm, 2.0);
                    var map2 =
                        new ArithmeticSeries <int, double, MultiplyOp <double>, ArithmeticSeries <int, double, MultiplyOp <double>, SortedMapCursor <int, double> > >(
                            map, 2.0);

                    var sum = 0.0;
                    foreach (var kvp in map2)
                    {
                        sum += kvp.Value;
                    }
                    sw.Stop();
                    Assert.IsTrue(sum > 0);
                    Console.WriteLine($"ArithmeticSeries {sw.MOPS(count)}");
                }

                {
                    sw.Restart();
                    var map  = new MapValuesSeries <int, double, double, SortedMapCursor <int, double> >(sm, i => Apply(i, 2.0));
                    var map2 = new MapValuesSeries <int, double, double, MapValuesSeries <int, double, double, SortedMapCursor <int, double> > >(map, i => Apply(i, 2.0));
                    var sum  = 0.0;
                    foreach (var kvp in map2)
                    {
                        sum += kvp.Value;
                    }
                    sw.Stop();
                    Assert.IsTrue(sum > 0);

                    Console.WriteLine($"MapValuesSeries {sw.MOPS(count)}");
                }

                {
                    sw.Restart();
                    var map = sm
                              .Select(x => new KeyValuePair <int, double>(x.Key, x.Value * 2))
                              .Select(x => new KeyValuePair <int, double>(x.Key, x.Value * 2));
                    var sum = 0.0;
                    foreach (var kvp in map)
                    {
                        sum += kvp.Value;
                    }
                    sw.Stop();
                    Assert.IsTrue(sum > 0);

                    Console.WriteLine($"LINQ {sw.MOPS(count)}");
                }
            }
        }
Exemple #10
0
        public void CouldMapValuesBenchmarkArithmeticVsMapCursor()
        {
            var sm    = new SortedMap <int, double>();
            var count = 10000000;

            sm.AddLast(0, 0);
            for (int i = 2; i < count; i++)
            {
                sm.AddLast(i, i);
            }

            for (int r = 0; r < 10; r++)
            {
                {
                    var sum = 0.0;
                    using (Benchmark.Run("SortedMap", count))
                    {
                        foreach (var kvp in sm)
                        {
                            sum += kvp.Value;
                        }
                    }
                    Assert.IsTrue(sum > 0);
                }

                {
                    var map =
                        new ArithmeticSeries <int, double, MultiplyOp <double>, SortedMapCursor <int, double> >(sm.GetEnumerator(),
                                                                                                                2.0);
                    var map2 = map + 2;
                    //new ArithmeticSeries<int, double, MultiplyOp<double>, ArithmeticSeries<int, double,
                    //    MultiplyOp<double>, SortedMapCursor<int, double>>>(
                    //    map.Initialize, 2.0);
                    var sum = 0.0;
                    using (Benchmark.Run("ArithmeticSeries", count))
                    {
                        foreach (var kvp in map2)
                        {
                            sum += kvp.Value;
                        }
                    }
                    Assert.IsTrue(sum > 0);
                }

                {
                    var c =
                        new Op <int, double, MultiplyOp <double>, SortedMapCursor <int, double> >(
                            sm.GetEnumerator(), 2.0);
                    var c1 =
                        new Op <int, double, AddOp <double>, Op <int, double,
                                                                 MultiplyOp <double>, SortedMapCursor <int, double> > >(
                            c, 2.0);
                    var series = new Series <int, double, Op <int, double, AddOp <double>, Op <int, double,
                                                                                               MultiplyOp <double>, SortedMapCursor <int, double> > > >(c1);
                    var sum = 0.0;
                    using (Benchmark.Run("ArithmeticCursor", count))
                    {
                        foreach (var kvp in series)
                        {
                            sum += kvp.Value;
                        }
                    }
                    Assert.IsTrue(sum > 0);
                }

                {
                    var map =
                        new MapValuesSeries <int, double, double, SortedMapCursor <int, double> >(sm.GetEnumerator(),
                                                                                                  i => Apply(i, 2.0));
                    var map2 =
                        new
                        MapValuesSeries <int, double, double, MapValuesSeries <int, double, double,
                                                                               SortedMapCursor <int, double> > >(map, i => Apply2(i, 2.0));
                    var sum = 0.0;
                    using (Benchmark.Run("MapValuesSeries", count))
                    {
                        foreach (var kvp in map2)
                        {
                            sum += kvp.Value;
                        }
                    }
                    Assert.IsTrue(sum > 0);
                }

                {
                    var map = (sm * 2) + 2;
                    var sum = 0.0;
                    using (Benchmark.Run("BaseSeries operator", count))
                    {
                        foreach (var kvp in map)
                        {
                            sum += kvp.Value;
                        }
                    }
                    Assert.IsTrue(sum > 0);
                }

                {
                    var map = sm
                              .Select(x => new KeyValuePair <int, double>(x.Key, x.Value * 2))
                              .Select(x => new KeyValuePair <int, double>(x.Key, x.Value + 2));
                    var sum = 0.0;
                    using (Benchmark.Run("LINQ", count))
                    {
                        foreach (var kvp in map)
                        {
                            sum += kvp.Value;
                        }
                    }
                    Assert.IsTrue(sum > 0);
                }
            }

            Benchmark.Dump();
        }