public void AddMonthsByEnd_0c()
        {
            DateTime d = new DateTime(1959, 2, 28);
            Assert.AreEqual(d, d.AddMonthsByEnd(0, 0));

            Assert.AreEqual(new DateTime(1959, 3, 31), d.AddMonthsByEnd(0, 1));
            Assert.AreEqual(new DateTime(1959, 4, 30), d.AddMonthsByEnd(0, 2));
            Assert.AreEqual(new DateTime(1960, 2, 29), d.AddMonthsByEnd(0, 12));
            Assert.AreEqual(new DateTime(1960, 3, 31), d.AddMonthsByEnd(0, 13));
            Assert.AreEqual(new DateTime(1960, 4, 30), d.AddMonthsByEnd(0, 14));
            Assert.AreEqual(new DateTime(1960, 5, 31), d.AddMonthsByEnd(0, 15));

            Assert.AreEqual(new DateTime(1959, 1, 31), d.AddMonthsByEnd(0, -1));
            Assert.AreEqual(new DateTime(1958, 12, 31), d.AddMonthsByEnd(0, -2));
            Assert.AreEqual(new DateTime(1958, 3, 31), d.AddMonthsByEnd(0, -11));
            Assert.AreEqual(new DateTime(1958, 2, 28), d.AddMonthsByEnd(0, -12));
            Assert.AreEqual(new DateTime(1958, 1, 31), d.AddMonthsByEnd(0, -13));
        }
        public void AddMonthsByEnd_2c()
        {
            DateTime d = new DateTime(1959, 3, 2);
            Assert.AreEqual(d, d.AddMonthsByEnd(2, 0));

            Assert.AreEqual(new DateTime(1959, 4, 2), d.AddMonthsByEnd(2, 1));
            Assert.AreEqual(new DateTime(1959, 5, 2), d.AddMonthsByEnd(2, 2));
            Assert.AreEqual(new DateTime(1960, 3, 2), d.AddMonthsByEnd(2, 12));
            Assert.AreEqual(new DateTime(1960, 4, 2), d.AddMonthsByEnd(2, 13));
            Assert.AreEqual(new DateTime(1960, 5, 2), d.AddMonthsByEnd(2, 14));
            Assert.AreEqual(new DateTime(1960, 6, 2), d.AddMonthsByEnd(2, 15));

            Assert.AreEqual(new DateTime(1959, 2, 2), d.AddMonthsByEnd(2, -1));
            Assert.AreEqual(new DateTime(1959, 1, 2), d.AddMonthsByEnd(2, -2));
            Assert.AreEqual(new DateTime(1958, 4, 2), d.AddMonthsByEnd(2, -11));
            Assert.AreEqual(new DateTime(1958, 3, 2), d.AddMonthsByEnd(2, -12));
            Assert.AreEqual(new DateTime(1958, 2, 2), d.AddMonthsByEnd(2, -13));
        }
        public void AddMonthsByEnd_30c()
        {
            DateTime d = new DateTime(1959, 3, 30);
            Assert.AreEqual(d, d.AddMonthsByEnd(30, 0));

            Assert.AreEqual(new DateTime(1959, 4, 30), d.AddMonthsByEnd(30, 1));
            Assert.AreEqual(new DateTime(1959, 5, 30), d.AddMonthsByEnd(30, 2));
            Assert.AreEqual(new DateTime(1960, 3, 1), d.AddMonthsByEnd(30, 11));
            Assert.AreEqual(new DateTime(1960, 3, 30), d.AddMonthsByEnd(30, 12));
            Assert.AreEqual(new DateTime(1960, 4, 30), d.AddMonthsByEnd(30, 13));
            Assert.AreEqual(new DateTime(1960, 5, 30), d.AddMonthsByEnd(30, 14));
            Assert.AreEqual(new DateTime(1960, 6, 30), d.AddMonthsByEnd(30, 15));

            Assert.AreEqual(new DateTime(1959, 3, 2), d.AddMonthsByEnd(30, -1));
            Assert.AreEqual(new DateTime(1959, 1, 30), d.AddMonthsByEnd(30, -2));
            Assert.AreEqual(new DateTime(1958, 4, 30), d.AddMonthsByEnd(30, -11));
            Assert.AreEqual(new DateTime(1958, 3, 30), d.AddMonthsByEnd(30, -12));
            Assert.AreEqual(new DateTime(1958, 3, 2), d.AddMonthsByEnd(30, -13));
        }
        public void AddMonthsByEnd_1b()
        {
            DateTime d = new DateTime(1960, 3, 1);
            Assert.AreEqual(d, d.AddMonthsByEnd(1, 0));

            Assert.AreEqual(new DateTime(1960, 4, 1), d.AddMonthsByEnd(1, 1));
            Assert.AreEqual(new DateTime(1960, 5, 1), d.AddMonthsByEnd(1, 2));
            Assert.AreEqual(new DateTime(1961, 3, 1), d.AddMonthsByEnd(1, 12));
            Assert.AreEqual(new DateTime(1961, 4, 1), d.AddMonthsByEnd(1, 13));
            Assert.AreEqual(new DateTime(1961, 5, 1), d.AddMonthsByEnd(1, 14));
            Assert.AreEqual(new DateTime(1961, 6, 1), d.AddMonthsByEnd(1, 15));

            Assert.AreEqual(new DateTime(1960, 2, 1), d.AddMonthsByEnd(1, -1));
            Assert.AreEqual(new DateTime(1960, 1, 1), d.AddMonthsByEnd(1, -2));
            Assert.AreEqual(new DateTime(1959, 4, 1), d.AddMonthsByEnd(1, -11));
            Assert.AreEqual(new DateTime(1959, 3, 1), d.AddMonthsByEnd(1, -12));
            Assert.AreEqual(new DateTime(1959, 2, 1), d.AddMonthsByEnd(1, -13));
        }