public void CanMatchMonthWithMatrix()
        {
            // build a matrix:
            DayInQuarterTE te1 = new DayInQuarterTE(QuarterEnum.First, QuarterlyIntervalEnum.First, MonthlyIntervalEnum.First, DayOfWeekEnum.Fri);
            var mqMatrix = te1.BuildMonthQuarterMatrix();

            // test that we find quarters & intervals based on arbitrary dates
            DateTime dt;
            int expectedMonth;
            int ourMonth;
            int monthCounter = 1;
            for (int i = 0; i <= 3; i++) // quarters
            {
                for (int j = 0; j <= 2; j++) // quarter intervals (months)
                {
                    expectedMonth = (i * 3) + j; // zero-based month for the matrix coordinates we are at
                    dt = new DateTime(DateTime.Now.Year, monthCounter, 15);
                    ourMonth = (int)mqMatrix.GetValue(i, j) + 1; // zero-based

                    Assert.IsTrue(ourMonth == dt.Month, string.Format("date match wrong: {0}", dt.ToString("f")));

                    monthCounter++;
                }
            }
        }
        public void CanFindSetTEInMatrix()
        {
            // te for Q1, Month 1 (Jan == 0)
            DayInQuarterTE te1 = new DayInQuarterTE(QuarterEnum.First, QuarterlyIntervalEnum.First, MonthlyIntervalEnum.First, DayOfWeekEnum.Fri);
            var mqMatrix = te1.BuildMonthQuarterMatrix();

            int expectedMonth = (int)mqMatrix.GetValue(0, 0);
            Assert.IsTrue(expectedMonth == 0, "expect Jan (0)");

            // now loop 'em all:
            DayInQuarterTE te = null;
            QuarterEnum quarter;
            QuarterlyIntervalEnum quarterInterval;
            int monthCounter = 0;

            for (int i = 0; i <= 3; i++)
            {
                for (int j = 0; j <= 2; j++)
                {
                    quarter = (QuarterEnum)i;
                    quarterInterval = (QuarterlyIntervalEnum)j;
                    te = new DayInQuarterTE(quarter, quarterInterval, MonthlyIntervalEnum.First, DayOfWeekEnum.Fri);

                    expectedMonth = (int)mqMatrix.GetValue(i, j);
                    Assert.IsTrue(expectedMonth == monthCounter, string.Format("expected {0}, returned {1}", monthCounter, expectedMonth));

                    monthCounter++;
                }
            }
        }
        public void MonthQuarterMatrixConstructed()
        {
            // arbitrary TE
            DayInQuarterTE te = new DayInQuarterTE(QuarterEnum.First, QuarterlyIntervalEnum.First, MonthlyIntervalEnum.First, DayOfWeekEnum.Fri);
            var mqMatrix = te.BuildMonthQuarterMatrix();

            // check all of the values of the matrix: length1 == quarters, length2 == quarter intervals (months 1, 2, 3)
            Assert.IsTrue((int)mqMatrix.GetValue(0, 0) == 0, "expect Month 0 (Jan)");
            Assert.IsTrue((int)mqMatrix.GetValue(0, 1) == 1, "expect Month 1 (Feb)");
            Assert.IsTrue((int)mqMatrix.GetValue(0, 2) == 2, "expect Month 2 (Mar)");

            Assert.IsTrue((int)mqMatrix.GetValue(1, 0) == 3, "expect Month 3 (Apr)");
            Assert.IsTrue((int)mqMatrix.GetValue(1, 1) == 4, "expect Month 4 (May)");
            Assert.IsTrue((int)mqMatrix.GetValue(1, 2) == 5, "expect Month 5 (Jun)");

            Assert.IsTrue((int)mqMatrix.GetValue(2, 0) == 6, "expect Month 6 (Jul)");
            Assert.IsTrue((int)mqMatrix.GetValue(2, 1) == 7, "expect Month 7 (Aug)");
            Assert.IsTrue((int)mqMatrix.GetValue(2, 2) == 8, "expect Month 8 (Sep)");

            Assert.IsTrue((int)mqMatrix.GetValue(3, 0) == 9, "expect Month 9 (Oct)");
            Assert.IsTrue((int)mqMatrix.GetValue(3, 1) == 10, "expect Month 10 (Nov)");
            Assert.IsTrue((int)mqMatrix.GetValue(3, 2) == 11, "expect Month 11 (Dec)");
        }