예제 #1
0
        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);
        }
예제 #2
0
        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());
        }
예제 #3
0
        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());
        }
예제 #4
0
        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());
        }
예제 #5
0
        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());
        }
예제 #6
0
        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());
        }
예제 #7
0
        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());
        }