using Microsoft.VisualStudio.TestTools.UnitTesting;
using System;
using System.Collections.Generic;
using System.Diagnostics;
namespace Falcon.SugarApi.Test
{
///
/// 枚举类型扩展方法
///
[TestClass]
public class IEnumerableExtendTest
{
[TestMethod("ToDataTable测试")]
public void ToDataTableTest() {
var sw = new Stopwatch();
var list = new List {
new{a=1,b="b1" },
new{a=2,b="b2",c=1 },
};
sw.Start();
var r = list.ToDataTable();
sw.Stop();
Console.WriteLine($"ToDataTable转换,共用时{sw.ElapsedMilliseconds}毫秒");
//测试表
Assert.IsNotNull(r);
Assert.AreEqual(3, r.Columns.Count);
Assert.AreEqual(2, r.Rows.Count);
//测试列
var col1 = r.Columns[0];
Assert.IsTrue(col1.ColumnName == "a");
Assert.IsTrue(col1.DataType == typeof(int));
var col2 = r.Columns[1];
Assert.IsTrue(col2.ColumnName == "b");
Assert.IsTrue(col2.DataType == typeof(string));
var col3 = r.Columns[2];
Assert.IsTrue(col3.ColumnName == "c");
Assert.IsTrue(col3.DataType == typeof(int));
//测试行
var row = r.Rows[0];
Assert.IsTrue(row[0].ToString() == "1");
Assert.IsTrue(row[1].ToString() == "b1");
Assert.IsTrue(row[2].ToString() == "");
row = r.Rows[1];
Assert.IsTrue((int)row[0] == 2);
Assert.IsTrue((string)row[1] == "b2");
Assert.IsTrue((int)row[2] == 1);
Console.WriteLine($"ToDataTable测试完成");
var models = new List {
new ToDataTableTestModel{ id=1, },
new ToDataTableTestModel{id=2,Name="name2" },
};
sw.Reset();
r = models.ToDataTable();
sw.Stop();
Console.WriteLine($"ToDataTable<>转换,共用时{sw.ElapsedMilliseconds}毫秒");
//测试表
Assert.IsNotNull(r);
Assert.AreEqual(2, r.Columns.Count);
Assert.AreEqual(2, r.Rows.Count);
//测试列
col1 = r.Columns[0];
Assert.IsTrue(col1.ColumnName == "id");
Assert.IsTrue(col1.DataType == typeof(int));
col2 = r.Columns[1];
Assert.IsTrue(col2.ColumnName == "Name");
Assert.IsTrue(col2.DataType == typeof(string));
//测试行
row = r.Rows[0];
Assert.IsTrue(row[0].ToString() == "1");
Assert.IsTrue(row[1].ToString() == "");
row = r.Rows[1];
Assert.IsTrue((int)row[0] == 2);
Assert.IsTrue(row[1].ToString() == "name2");
Console.WriteLine($"ToDataTable<>测试完成");
}
[TestMethod("Reduce测试")]
public void ReduceTest() {
var list = new List { 1, 2, 3, 4 };
var sum = list.Reduce((a, b) => a + b, 0);
Assert.IsTrue(sum == 10, "对数组求和错误");
var people = new List {
new person{ IsMan=true,age=30 },
new person{ IsMan=false,age=40 },
new person{ IsMan=true,age=50 },
new person{ IsMan=true,age=60 },
};
var sumage = people.Reduce((a, b) => a + (b.IsMan ? b.age : 0), 0);
Assert.IsTrue(sumage == 30 + 50 + 60, "有条件求和错误");
var men = people.Reduce((a, b) => {
if (b.IsMan) {
a.Add(b);
}
return a;
}, new List());
foreach (var p in men) {
Assert.IsTrue(p.IsMan, "缩减为男性集合错误!");
}
var arr = new string[] { };
var initVal = arr.Reduce((a, b) => throw new Exception("空集合不可以调用缩减方法"), "abc");
Assert.IsTrue(initVal == "abc", "空集合返回初始值,并且不调用缩减方法。");
}
}
internal class ToDataTableTestModel
{
public int id { get; set; }
public string Name { get; set; }
}
internal class person
{
public int age { get; set; }
public bool IsMan { get; set; }
}
}