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); }
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)); }
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)); }
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)); }
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); }
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)}"); //} }
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))); }
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)}"); } } }
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(); }