public void RoundMonthEnd_Jan1()
        {
            DateTime d = new DateTime(1960, 1, 1);

            Assert.AreEqual(new DateTime(1960, 1, 31, 23, 59, 0), d.RoundMonthEnd(0));

            Assert.AreEqual(new DateTime(1960, 1, 1, 23, 59, 0), d.RoundMonthEnd(1));
            Assert.AreEqual(new DateTime(1960, 1, 2, 23, 59, 0), d.RoundMonthEnd(2));
            Assert.AreEqual(new DateTime(1960, 1, 29, 23, 59, 0), d.RoundMonthEnd(29));
            Assert.AreEqual(new DateTime(1960, 1, 30, 23, 59, 0), d.RoundMonthEnd(30));

            Assert.AreEqual(new DateTime(1960, 1, 30, 23, 59, 0), d.RoundMonthEnd(-1));
            Assert.AreEqual(new DateTime(1960, 1, 29, 23, 59, 0), d.RoundMonthEnd(-2));
            Assert.AreEqual(new DateTime(1960, 1, 2, 23, 59, 0), d.RoundMonthEnd(-29));
            Assert.AreEqual(new DateTime(1960, 1, 1, 23, 59, 0), d.RoundMonthEnd(-30));
        }
        public void RoundMonthEnd_Feb28()
        {
            DateTime d = new DateTime(1960, 2, 28);

            Assert.AreEqual(new DateTime(1960, 2, 29, 23, 59, 0), d.RoundMonthEnd(0));

            Assert.AreEqual(new DateTime(1960, 3, 1, 23, 59, 0), d.RoundMonthEnd(1));
            Assert.AreEqual(new DateTime(1960, 3, 2, 23, 59, 0), d.RoundMonthEnd(2));
            Assert.AreEqual(new DateTime(1960, 2, 29, 23, 59, 0), d.RoundMonthEnd(29));
            Assert.AreEqual(new DateTime(1960, 3, 1, 23, 59, 0), d.RoundMonthEnd(30));

            Assert.AreEqual(new DateTime(1960, 2, 28, 23, 59, 0), d.RoundMonthEnd(-1));
            Assert.AreEqual(new DateTime(1960, 3, 29, 23, 59, 0), d.RoundMonthEnd(-2));
            Assert.AreEqual(new DateTime(1960, 3, 2, 23, 59, 0), d.RoundMonthEnd(-29));
            Assert.AreEqual(new DateTime(1960, 3, 1, 23, 59, 0), d.RoundMonthEnd(-30));
        }