NetFabric / NetFabric.Hyperlinq

High performance LINQ implementation with minimal heap allocations. Supports enumerables, async enumerables, arrays and Span<T>.
MIT License
875 stars 35 forks source link

Sum on ValueEnumerable.Range gives wrong sum #388

Open CyberBotX opened 1 year ago

CyberBotX commented 1 year ago

(NOTE: All of this is with version 3.0.0-beta48 from NuGet.)

If I do the following:

ValueEnumerable.Range(0, 10).Sum()

I get back 50 for the result, when the value should be 45.

If I change the above to:

ValueEnumerable.Range(0, 10).Select(x => x).Sum() or ValueEnumerable.Range(0, 10).Sum(x => x)

I get back the proper result of 45. It seems that adding almost any operation before the Sum (or a selector delegate within Sum) allows it to return the proper result, but just a straight parameterless Sum does not. For instance, even:

ValueEnumerable.Range(0, 10).Where(x => true).Sum()

I get back the proper result of 45. But doing:

ValueEnumerable.Range(0, 10).Skip(0).Sum()

I get back the wrong result of 50. (Take also doesn't change the result to the correct one.)