public void TestEquivalent() { var builder = new SubtotalBuilder(ParsingF.GroupedQuery("`vX@JPY[20170101]").Subtotal); var bal = new[] { new Balance { Currency = "JPY", Fund = 8 }, new Balance { Currency = "CNY", Fund = 1 }, new Balance { Currency = "USD", Fund = 4 }, new Balance { Currency = "CNY", Fund = 2 } }; var res = builder.Build(bal); Assert.IsAssignableFrom <ISubtotalRoot>(res); Assert.Null(res.Items); Assert.Equal((8 * 456 + 1 + 4 * 789 + 2) / 456D, res.Fund); }
public void TestAggrEveryNullEqui(string rng, string incl) { var builder = new SubtotalBuilder(ParsingF.GroupedQuery($"``vD[{rng}]X[20170101]").Subtotal); var bal = new Balance[] { }; var res = builder.Build(bal); Assert.IsAssignableFrom <ISubtotalRoot>(res); var resx = (ISubtotalRoot)res; var lst = new List <Balance>(); foreach (var item in resx.Items) { Assert.IsAssignableFrom <ISubtotalDate>(item); var resxx = (ISubtotalDate)item; Assert.Null(resxx.Items); Assert.Equal(SubtotalLevel.Day, resxx.Level); lst.Add(new Balance { Date = resxx.Date, Fund = resxx.Fund }); } Assert.Equal(0, res.Fund); var lst0 = new List <Balance>(); if (incl[0] == '1') { lst0.Add(new Balance { Date = null, Fund = 0 }); } if (incl[1] == '1') { lst0.Add(new Balance { Date = new DateTime(2017, 01, 01, 0, 0, 0, DateTimeKind.Utc), Fund = 0 }); } if (incl[2] == '1') { lst0.Add(new Balance { Date = new DateTime(2017, 01, 02, 0, 0, 0, DateTimeKind.Utc), Fund = 0 }); } if (incl[3] == '1') { lst0.Add(new Balance { Date = new DateTime(2017, 01, 03, 0, 0, 0, DateTimeKind.Utc), Fund = 0 }); } Assert.Equal(lst0, lst, new BalanceEqualityComparer()); }
public void TestMonth() { var builder = new SubtotalBuilder(ParsingF.GroupedQuery("`m").Subtotal); var bal = new[] { new Balance { Date = new DateTime(2017, 01, 01, 0, 0, 0, DateTimeKind.Utc), Fund = 8 }, new Balance { Date = new DateTime(2017, 02, 01, 0, 0, 0, DateTimeKind.Utc), Fund = 1 }, new Balance { Date = new DateTime(2017, 03, 01, 0, 0, 0, DateTimeKind.Utc), Fund = 4 }, new Balance { Date = new DateTime(2017, 04, 01, 0, 0, 0, DateTimeKind.Utc), Fund = 2 } }; var res = builder.Build(bal); Assert.IsAssignableFrom <ISubtotalRoot>(res); var resx = (ISubtotalRoot)res; var lst = new List <Balance>(); foreach (var item in resx.Items) { Assert.IsAssignableFrom <ISubtotalDate>(item); var resxx = (ISubtotalDate)item; Assert.Null(resxx.Items); Assert.Equal(SubtotalLevel.Month, resxx.Level); lst.Add(new Balance { Date = resxx.Date, Fund = resxx.Fund }); } Assert.Equal(bal.Sum(b => b.Fund), res.Fund); Assert.Equal(bal, lst, new BalanceEqualityComparer()); }
public void TestCurrency() { var builder = new SubtotalBuilder(ParsingF.GroupedQuery("`C").Subtotal); var bal = new[] { new Balance { Currency = "JPY", Fund = 8 }, new Balance { Currency = "CNY", Fund = 1 }, new Balance { Currency = "USD", Fund = 4 }, new Balance { Currency = "CNY", Fund = 2 } }; var res = builder.Build(bal); Assert.IsAssignableFrom <ISubtotalRoot>(res); var resx = (ISubtotalRoot)res; var lst = new List <Balance>(); foreach (var item in resx.Items) { Assert.IsAssignableFrom <ISubtotalCurrency>(item); var resxx = (ISubtotalCurrency)item; Assert.Null(resxx.Items); lst.Add(new Balance { Currency = resxx.Currency, Fund = resxx.Fund }); } Assert.Equal(bal.Sum(b => b.Fund), res.Fund); Assert.Equal( new List <Balance> { new Balance { Currency = "JPY", Fund = 8 }, new Balance { Currency = "CNY", Fund = 3 }, new Balance { Currency = "USD", Fund = 4 } }, lst, new BalanceEqualityComparer()); }
public void TestAggrChangedEquivalent() { var builder = new SubtotalBuilder(ParsingF.GroupedQuery("`vDX[20170101]").Subtotal); var bal = new[] { new Balance { Currency = "JPY", Date = new DateTime(2017, 01, 01, 0, 0, 0, DateTimeKind.Utc), Fund = 8 }, new Balance { Currency = "CNY", Date = new DateTime(2017, 01, 01, 0, 0, 0, DateTimeKind.Utc), Fund = 1 }, new Balance { Currency = "USD", Date = new DateTime(2017, 01, 05, 0, 0, 0, DateTimeKind.Utc), Fund = 4 }, new Balance { Currency = "CNY", Date = new DateTime(2017, 01, 05, 0, 0, 0, DateTimeKind.Utc), Fund = 2 } }; var res = builder.Build(bal); Assert.IsAssignableFrom <ISubtotalRoot>(res); var resx = (ISubtotalRoot)res; var lst = new List <Balance>(); foreach (var item in resx.Items) { Assert.IsAssignableFrom <ISubtotalDate>(item); var resxx = (ISubtotalDate)item; Assert.Null(resxx.Items); Assert.Equal(SubtotalLevel.Day, resxx.Level); lst.Add(new Balance { Date = resxx.Date, Fund = resxx.Fund }); } Assert.Equal(8 * 456 + 1 + 4 * 789 + 2, res.Fund); Assert.Equal( new[] { new Balance { Date = new DateTime(2017, 01, 01, 0, 0, 0, DateTimeKind.Utc), Fund = 8 * 456 + 1 }, new Balance { Date = new DateTime(2017, 01, 05, 0, 0, 0, DateTimeKind.Utc), Fund = 8 * 456 + 1 + 4 * 789 + 2 } }, lst, new BalanceEqualityComparer()); }
public void TestTitleSubTitle() { var builder = new SubtotalBuilder(ParsingF.GroupedQuery("`ts").Subtotal); var bal = new[] { new Balance { Title = 4567, Fund = 8 }, new Balance { Title = 1234, Fund = 1 }, new Balance { Title = 6543, Fund = 4 }, new Balance { Title = 1234, Fund = 2 }, new Balance { Title = 4567, SubTitle = 01, Fund = 128 }, new Balance { Title = 1234, SubTitle = 02, Fund = 16 }, new Balance { Title = 6543, SubTitle = 01, Fund = 64 }, new Balance { Title = 1234, SubTitle = 08, Fund = 32 } }; var res = builder.Build(bal); Assert.IsAssignableFrom <ISubtotalRoot>(res); var resx = (ISubtotalRoot)res; var lst = new List <Balance>(); foreach (var item in resx.Items) { Assert.IsAssignableFrom <ISubtotalTitle>(item); var resxx = (ISubtotalTitle)item; foreach (var item2 in resxx.Items) { Assert.IsAssignableFrom <ISubtotalSubTitle>(item2); var resxxx = (ISubtotalSubTitle)item2; Assert.Null(resxxx.Items); lst.Add(new Balance { Title = resxx.Title, SubTitle = resxxx.SubTitle, Fund = resxxx.Fund }); } } Assert.Equal(bal.Sum(b => b.Fund), res.Fund); Assert.Equal( new List <Balance> { new Balance { Title = 4567, Fund = 8 }, new Balance { Title = 4567, SubTitle = 01, Fund = 128 }, new Balance { Title = 1234, Fund = 3 }, new Balance { Title = 1234, SubTitle = 02, Fund = 16 }, new Balance { Title = 1234, SubTitle = 08, Fund = 32 }, new Balance { Title = 6543, Fund = 4 }, new Balance { Title = 6543, SubTitle = 01, Fund = 64 } }, lst, new BalanceEqualityComparer()); }
public void TestAggrEveryEqui(string rng, string incl) { var builder = new SubtotalBuilder(ParsingF.GroupedQuery($"``vD[{rng}]X[20170101]").Subtotal, m_Exchange); var bal = new[] { new Balance { Date = null, Currency = "JPY", Fund = 1 / 2D / 456D }, new Balance { Date = new DateTime(2017, 01, 02, 0, 0, 0, DateTimeKind.Utc), Currency = "JPY", Fund = 2 / 2D / 456D }, new Balance { Date = new DateTime(2017, 01, 04, 0, 0, 0, DateTimeKind.Utc), Currency = "JPY", Fund = 4 / 2D / 456D }, new Balance { Date = null, Currency = "USD", Fund = 1 / 2D / 789D }, new Balance { Date = new DateTime(2017, 01, 02, 0, 0, 0, DateTimeKind.Utc), Currency = "USD", Fund = 2 / 2D / 789D }, new Balance { Date = new DateTime(2017, 01, 04, 0, 0, 0, DateTimeKind.Utc), Currency = "USD", Fund = 4 / 2D / 789D } }; var res = builder.Build(bal); Assert.IsAssignableFrom <ISubtotalRoot>(res); var resx = (ISubtotalRoot)res; var lst = new List <Balance>(); foreach (var item in resx.Items) { Assert.IsAssignableFrom <ISubtotalDate>(item); var resxx = (ISubtotalDate)item; Assert.Null(resxx.Items); Assert.Equal(SubtotalLevel.Day, resxx.Level); lst.Add(new Balance { Date = resxx.Date, Fund = resxx.Fund }); } Assert.Equal(1 + 2 + 4, res.Fund); var lst0 = new List <Balance>(); if (incl[0] == '1') { lst0.Add(new Balance { Date = null, Fund = 1 }); } if (incl[1] == '1') { lst0.Add(new Balance { Date = new DateTime(2017, 01, 01, 0, 0, 0, DateTimeKind.Utc), Fund = 1 }); } if (incl[2] == '1') { lst0.Add(new Balance { Date = new DateTime(2017, 01, 02, 0, 0, 0, DateTimeKind.Utc), Fund = 1 + 2 }); } if (incl[3] == '1') { lst0.Add(new Balance { Date = new DateTime(2017, 01, 03, 0, 0, 0, DateTimeKind.Utc), Fund = 1 + 2 }); } if (incl[4] == '1') { lst0.Add( new Balance { Date = new DateTime(2017, 01, 04, 0, 0, 0, DateTimeKind.Utc), Fund = 1 + 2 + 4 }); } if (incl[5] == '1') { lst0.Add( new Balance { Date = new DateTime(2017, 01, 05, 0, 0, 0, DateTimeKind.Utc), Fund = 1 + 2 + 4 }); } Assert.Equal(lst0, lst, new BalanceEqualityComparer()); }