mirror of
https://github.com/oliverbooth/X10D
synced 2024-10-19 07:26:11 +00:00
145 lines
3.5 KiB
C#
145 lines
3.5 KiB
C#
|
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
|||
|
|
|||
|
namespace X10D.Tests.Core;
|
|||
|
|
|||
|
public partial class EnumerableTests
|
|||
|
{
|
|||
|
// the Fixed methods in these tests can't use DataRow attribute because the use of a decimal literal compiles to an
|
|||
|
// instantiation of the decimal struct, which is not a compile-time constant expression.
|
|||
|
// thanks. I fucking hate it.
|
|||
|
|
|||
|
[TestMethod]
|
|||
|
public void ProductDecimal_Fixed()
|
|||
|
{
|
|||
|
{
|
|||
|
var source = new[] {0m, 1m};
|
|||
|
var expected = 1m;
|
|||
|
foreach (decimal item in source)
|
|||
|
{
|
|||
|
expected *= item;
|
|||
|
}
|
|||
|
|
|||
|
decimal actual = source.Product();
|
|||
|
|
|||
|
Assert.AreEqual(expected, actual);
|
|||
|
}
|
|||
|
{
|
|||
|
|
|||
|
var source = new[] {2m, 3m, 4m};
|
|||
|
var expected = 1m;
|
|||
|
foreach (decimal item in source)
|
|||
|
{
|
|||
|
expected *= item;
|
|||
|
}
|
|||
|
|
|||
|
decimal actual = source.Product();
|
|||
|
|
|||
|
Assert.AreEqual(expected, actual);
|
|||
|
}
|
|||
|
{
|
|||
|
|
|||
|
var source = new[] {1m, 2m, 3m, 4m, 5m, 6m, 7m, 8m, 9m, 10m};
|
|||
|
var expected = 1m;
|
|||
|
foreach (decimal item in source)
|
|||
|
{
|
|||
|
expected *= item;
|
|||
|
}
|
|||
|
|
|||
|
decimal actual = source.Product();
|
|||
|
|
|||
|
Assert.AreEqual(expected, actual);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
[TestMethod]
|
|||
|
public void ProductDecimal_Transformed_Fixed()
|
|||
|
{
|
|||
|
{
|
|||
|
var source = new[] {0m, 1m};
|
|||
|
var expected = 1m;
|
|||
|
foreach (decimal item in source)
|
|||
|
{
|
|||
|
expected *= item * 2;
|
|||
|
}
|
|||
|
|
|||
|
decimal actual = source.Product(n => n * 2);
|
|||
|
|
|||
|
Assert.AreEqual(expected, actual);
|
|||
|
}
|
|||
|
{
|
|||
|
var source = new[] {2m, 3m, 4m};
|
|||
|
var expected = 1m;
|
|||
|
foreach (decimal item in source)
|
|||
|
{
|
|||
|
expected *= item * 2;
|
|||
|
}
|
|||
|
|
|||
|
decimal actual = source.Product(n => n * 2);
|
|||
|
|
|||
|
Assert.AreEqual(expected, actual);
|
|||
|
}
|
|||
|
{
|
|||
|
var source = new[] {1m, 2m, 3m, 4m, 5m, 6m, 7m, 8m, 9m, 10m};
|
|||
|
var expected = 1m;
|
|||
|
foreach (decimal item in source)
|
|||
|
{
|
|||
|
expected *= item * 2;
|
|||
|
}
|
|||
|
|
|||
|
decimal actual = source.Product(n => n * 2);
|
|||
|
|
|||
|
Assert.AreEqual(expected, actual);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
[TestMethod]
|
|||
|
public void ProductDecimal_Random1000()
|
|||
|
{
|
|||
|
var random = new Random();
|
|||
|
|
|||
|
for (var i = 0; i < 1000; i++)
|
|||
|
{
|
|||
|
var source = new decimal[10];
|
|||
|
for (var j = 0; j < source.Length; j++)
|
|||
|
{
|
|||
|
source[j] = (decimal)random.NextDouble();
|
|||
|
}
|
|||
|
|
|||
|
var expected = 1m;
|
|||
|
foreach (decimal item in source)
|
|||
|
{
|
|||
|
expected *= item;
|
|||
|
}
|
|||
|
|
|||
|
decimal actual = source.Product();
|
|||
|
|
|||
|
Assert.AreEqual(expected, actual);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
[TestMethod]
|
|||
|
public void ProductDecimal_Transformed_Random1000()
|
|||
|
{
|
|||
|
var random = new Random();
|
|||
|
|
|||
|
for (var i = 0; i < 1000; i++)
|
|||
|
{
|
|||
|
var source = new decimal[10];
|
|||
|
for (var j = 0; j < source.Length; j++)
|
|||
|
{
|
|||
|
source[j] = (decimal)random.NextDouble();
|
|||
|
}
|
|||
|
|
|||
|
var expected = 1m;
|
|||
|
foreach (decimal item in source)
|
|||
|
{
|
|||
|
expected *= item * 2;
|
|||
|
}
|
|||
|
|
|||
|
decimal actual = source.Product(n => n * 2);
|
|||
|
|
|||
|
Assert.AreEqual(expected, actual);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|