using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Xunit;
using TupleStudy;
namespace ValueTupleStudyTest
{
///
/// ValueTuple 需要.net framework 4.7及以上
/// .net framework 4.7及以下,需要Nuget引用包System.ValueTuple 库
///
public class ValueTupleStudyTest
{
private ValueTupleStudy valueTupleStudy;
///
/// 构造函数
///
public ValueTupleStudyTest()
{
valueTupleStudy = new ValueTupleStudy();
}
///
/// 使用构造函数创建值元组
///
[Fact]
public void CreateValueTuple_Test()
{
//创建包含零个元组的值元组
var zeroTuple = this.valueTupleStudy.CreateValueTuple();
Assert.IsType(zeroTuple);
//1个元组的值元组
var oneTuple = valueTupleStudy.CreateValueTuple(1);
Assert.Equal(1, oneTuple.Item1);
Assert.Equal("first", new ValueTuple("first").Item1);
//2个元组的值元组
var twoTuple = valueTupleStudy.CreateValueTuple(1, 2);
Assert.Equal(1, twoTuple.Item1);
Assert.Equal(2, twoTuple.Item2);
//3个元组的值元组
var threeTuple = valueTupleStudy.CreateValueTuple(1, 2, 3);
Assert.Equal(1, threeTuple.Item1);
Assert.Equal(2, threeTuple.Item2);
Assert.Equal(3, threeTuple.Item3);
//4个元组的值元组
var fourTuple = valueTupleStudy.CreateValueTuple(1, 2, 3, 4);
Assert.Equal(1, fourTuple.Item1);
Assert.Equal(2, fourTuple.Item2);
Assert.Equal(3, fourTuple.Item3);
Assert.Equal(4, fourTuple.Item4);
//5个元组的值元组
var fiveTuple = valueTupleStudy.CreateValueTuple(1, 2, 3, 4, 5);
Assert.Equal(1, fiveTuple.Item1);
Assert.Equal(2, fiveTuple.Item2);
Assert.Equal(3, fiveTuple.Item3);
Assert.Equal(4, fiveTuple.Item4);
Assert.Equal(5, fiveTuple.Item5);
//6个元组的值元组
var sixTuple = valueTupleStudy.CreateValueTuple(1, 2, 3, 4, 5, 6);
Assert.Equal(1, sixTuple.Item1);
Assert.Equal(2, sixTuple.Item2);
Assert.Equal(3, sixTuple.Item3);
Assert.Equal(4, sixTuple.Item4);
Assert.Equal(5, sixTuple.Item5);
Assert.Equal(6, sixTuple.Item6);
//7个元组的值元组
var sevenTuple = valueTupleStudy.CreateValueTuple(1, 2, 3, 4, 5, 6, 7);
Assert.Equal(1, sevenTuple.Item1);
Assert.Equal(2, sevenTuple.Item2);
Assert.Equal(3, sevenTuple.Item3);
Assert.Equal(4, sevenTuple.Item4);
Assert.Equal(5, sevenTuple.Item5);
Assert.Equal(6, sevenTuple.Item6);
Assert.Equal(7, sevenTuple.Item7);
//8个及以上元组的值元组:元组嵌套
var overSevenTuple = valueTupleStudy.CreateValueTuple>(1, 2, 3, 4, 5, 6, 7, new ValueTuple(8, 9, 10));
Assert.Equal(1, overSevenTuple.Item1);
Assert.Equal(2, overSevenTuple.Item2);
Assert.Equal(3, overSevenTuple.Item3);
Assert.Equal(4, overSevenTuple.Item4);
Assert.Equal(5, overSevenTuple.Item5);
Assert.Equal(6, overSevenTuple.Item6);
Assert.Equal(7, overSevenTuple.Item7);
//元组嵌套
Assert.Equal(8, overSevenTuple.Item8);
Assert.Equal(9, overSevenTuple.Item9);
Assert.Equal(10, overSevenTuple.Item10);
//16个以上,要审视程序设计,是否确实需要使用ValueTuple,最好改成设计成类
}
}
}