//decision table based TEST(DecisionTableTest, WeakRobust) { //year: y1 = leap year, y2 = common year //month: m1 = 30days, m2 = 31days but not Dec, m3 = Dec., m4 = Feb. //day: d1 = (>=1 && <= 28), d2 = 28 ,d3 = 29, d4 = 30, d5 = 31 //m1 + (d1 or d2 or d3) EXPECT_EQ("1812/4/2", nextdate(1812, 4, 1)); //m1 + d4 EXPECT_EQ("1812/5/1", nextdate(1812, 4, 30)); //(m2 or m3) + (d1 or d2 or d3 or d4) EXPECT_EQ("1812/5/2", nextdate(1812, 5, 1)); //m2 + d5 EXPECT_EQ("1812/6/1", nextdate(1812, 5, 31)); //m3 + d5 EXPECT_EQ("1813/1/1", nextdate(1812, 12, 31)); //m4 + d1 EXPECT_EQ("1812/2/28", nextdate(1812, 2, 27)); //y1 + m4 + d2 EXPECT_EQ("1812/2/29", nextdate(1812, 2, 28)); //y2 + m4 + d2 EXPECT_EQ("1813/3/1", nextdate(1813, 2, 28)); //y1 + m4 + d3 EXPECT_EQ("1812/3/1", nextdate(1812, 2, 29)); }
// Multi-fault, Robust, Equivalent class TEST(NextdateTest, robust){ const int YEAR_LEN = 6; const int MONTH_LEN = 5; const int DAY_LEN = 6; const int year_test[YEAR_LEN] = {2000, 1900, 1948, 1911, 1811, 2013}; const int month_test[MONTH_LEN] = {2, 6, 12, 0, 13}; const int day_test[DAY_LEN] = {15, 29, 30, 31, 0, 32}; const Date answer[YEAR_LEN][MONTH_LEN][DAY_LEN] = { { {Date(2000, 2, 16), Date(2000, 3, 1), DATE_INVALID, DATE_INVALID, DATE_INVALID, DATE_INVALID}, {Date(2000, 6, 16), Date(2000, 6, 30), Date(2000, 7, 1), DATE_INVALID, DATE_INVALID, DATE_INVALID}, {Date(2000, 12, 16), Date(2000, 12, 30), Date(2000, 12, 31), Date(2001, 1, 1), DATE_INVALID, DATE_INVALID}, {DATE_INVALID, DATE_INVALID, DATE_INVALID, DATE_INVALID, DATE_INVALID, DATE_INVALID}, {DATE_INVALID, DATE_INVALID, DATE_INVALID, DATE_INVALID, DATE_INVALID, DATE_INVALID}}, { {Date(1900, 2, 16), DATE_INVALID, DATE_INVALID, DATE_INVALID, DATE_INVALID, DATE_INVALID}, {Date(1900, 6, 16), Date(1900, 6, 30), Date(1900, 7, 1), DATE_INVALID, DATE_INVALID, DATE_INVALID}, {Date(1900, 12, 16), Date(1900, 12, 30), Date(1900, 12, 31), Date(1901, 1, 1), DATE_INVALID, DATE_INVALID}, {DATE_INVALID, DATE_INVALID, DATE_INVALID, DATE_INVALID, DATE_INVALID, DATE_INVALID}, {DATE_INVALID, DATE_INVALID, DATE_INVALID, DATE_INVALID, DATE_INVALID, DATE_INVALID}}, { {Date(1948, 2, 16), Date(1948, 3, 1), DATE_INVALID, DATE_INVALID, DATE_INVALID, DATE_INVALID}, {Date(1948, 6, 16), Date(1948, 6, 30), Date(1948, 7, 1), DATE_INVALID, DATE_INVALID, DATE_INVALID}, {Date(1948, 12, 16), Date(1948, 12, 30), Date(1948, 12, 31), Date(1949, 1, 1), DATE_INVALID, DATE_INVALID}, {DATE_INVALID, DATE_INVALID, DATE_INVALID, DATE_INVALID, DATE_INVALID, DATE_INVALID}, {DATE_INVALID, DATE_INVALID, DATE_INVALID, DATE_INVALID, DATE_INVALID, DATE_INVALID}}, { {Date(1911, 2, 16), DATE_INVALID, DATE_INVALID, DATE_INVALID, DATE_INVALID, DATE_INVALID}, {Date(1911, 6, 16), Date(1911, 6, 30), Date(1911, 7, 1), DATE_INVALID, DATE_INVALID, DATE_INVALID}, {Date(1911, 12, 16), Date(1911, 12, 30), Date(1911, 12, 31), Date(1912, 1, 1), DATE_INVALID, DATE_INVALID}, {DATE_INVALID, DATE_INVALID, DATE_INVALID, DATE_INVALID, DATE_INVALID, DATE_INVALID}, {DATE_INVALID, DATE_INVALID, DATE_INVALID, DATE_INVALID, DATE_INVALID, DATE_INVALID}}, { {DATE_INVALID, DATE_INVALID, DATE_INVALID, DATE_INVALID, DATE_INVALID, DATE_INVALID}, {DATE_INVALID, DATE_INVALID, DATE_INVALID, DATE_INVALID, DATE_INVALID, DATE_INVALID}, {DATE_INVALID, DATE_INVALID, DATE_INVALID, DATE_INVALID, DATE_INVALID, DATE_INVALID}, {DATE_INVALID, DATE_INVALID, DATE_INVALID, DATE_INVALID, DATE_INVALID, DATE_INVALID}, {DATE_INVALID, DATE_INVALID, DATE_INVALID, DATE_INVALID, DATE_INVALID, DATE_INVALID}}, { {DATE_INVALID, DATE_INVALID, DATE_INVALID, DATE_INVALID, DATE_INVALID, DATE_INVALID}, {DATE_INVALID, DATE_INVALID, DATE_INVALID, DATE_INVALID, DATE_INVALID, DATE_INVALID}, {DATE_INVALID, DATE_INVALID, DATE_INVALID, DATE_INVALID, DATE_INVALID, DATE_INVALID}, {DATE_INVALID, DATE_INVALID, DATE_INVALID, DATE_INVALID, DATE_INVALID, DATE_INVALID}, {DATE_INVALID, DATE_INVALID, DATE_INVALID, DATE_INVALID, DATE_INVALID, DATE_INVALID}}, }; for( int year_index = 0; year_index < YEAR_LEN; year_index++ ){ for( int month_index = 0; month_index < MONTH_LEN; month_index++ ){ for( int day_index = 0; day_index < DAY_LEN; day_index++ ){ int year = year_test[year_index]; int month = month_test[month_index]; int day = day_test[day_index]; EXPECT_EQ(answer[year_index][month_index][day_index], nextdate(year, month, day)); } } } }
//robust boundary value TEST(BoundaryValueTest, Robust) { //year EXPECT_EQ("INVALID_INPUT", nextdate(1811, 7, 15)); EXPECT_EQ("1812/7/16", nextdate(1812, 7, 15)); EXPECT_EQ("1813/7/16", nextdate(1813, 7, 15)); EXPECT_EQ("1912/7/16", nextdate(1912, 7, 15)); EXPECT_EQ("2011/7/16", nextdate(2011, 7, 15)); EXPECT_EQ("2012/7/16", nextdate(2012, 7, 15)); EXPECT_EQ("INVALID_INPUT", nextdate(2013, 7, 15)); //month EXPECT_EQ("INVALID_INPUT", nextdate(1912, 0, 15)); EXPECT_EQ("1912/2/16", nextdate(1912, 2, 15)); EXPECT_EQ("1912/1/16", nextdate(1912, 1, 15)); EXPECT_EQ("1912/11/16", nextdate(1912, 11, 15)); EXPECT_EQ("1912/12/16", nextdate(1912, 12, 15)); EXPECT_EQ("INVALID_INPUT", nextdate(1912, 13, 15)); //day EXPECT_EQ("INVALID_INPUT", nextdate(1912, 7, 32)); EXPECT_EQ("1912/8/1", nextdate(1912, 7, 31)); EXPECT_EQ("1912/7/31", nextdate(1912, 7, 30)); EXPECT_EQ("1912/7/3", nextdate(1912, 7, 2)); EXPECT_EQ("1912/7/2", nextdate(1912, 7, 1)); EXPECT_EQ("INVALID_INPUT", nextdate(1912, 7, 0)); }
//edge values TEST(EdgeValueTest, WeakRobust) { //leap year + 30 days month + 30 day EXPECT_EQ("1812/5/1", nextdate(1812, 4, 30)); EXPECT_EQ("2012/5/1", nextdate(2012, 4, 30)); EXPECT_EQ("1812/12/1", nextdate(1812, 11, 30)); EXPECT_EQ("2012/12/1", nextdate(2012, 11, 30)); //leap year + 31 days month + 31 day EXPECT_EQ("1812/2/1", nextdate(1812, 1, 31)); EXPECT_EQ("2012/2/1", nextdate(2012, 1, 31)); EXPECT_EQ("1813/1/1", nextdate(1812, 12, 31)); EXPECT_EQ("OVER_MAX_YEAR", nextdate(2012, 12, 31)); //leap year + Feb. + 29 day EXPECT_EQ("1812/3/1", nextdate(1812, 2, 29)); EXPECT_EQ("2012/3/1", nextdate(2012, 2, 29)); //common year + Feb. + 28 day EXPECT_EQ("1813/3/1", nextdate(1813, 2, 28)); EXPECT_EQ("2011/3/1", nextdate(2011, 2, 28)); //others are redundant }
TEST(EquivalenceClassTest, WeakRobust) { //year: leap, common //month: 30, 31, Feb. //day: >=1 && < 28, 28, 29, 30, 31 /*WeakNormal*/ EXPECT_EQ("1912/6/15", nextdate(1912, 6, 14)); EXPECT_EQ("1912/6/29", nextdate(1912, 6, 28)); EXPECT_EQ("1912/6/30", nextdate(1912, 6, 29)); EXPECT_EQ("1912/7/1", nextdate(1912, 6, 30)); EXPECT_EQ("1912/8/1", nextdate(1912, 7, 31)); /*robust*/ EXPECT_EQ("INVALID_INPUT", nextdate(1811, 6, 15)); EXPECT_EQ("INVALID_INPUT", nextdate(2013, 6, 15)); EXPECT_EQ("INVALID_INPUT", nextdate(1912, -1, 15)); EXPECT_EQ("INVALID_INPUT", nextdate(1912, 13, 15)); EXPECT_EQ("INVALID_INPUT", nextdate(1912, 6, -1)); EXPECT_EQ("INVALID_INPUT", nextdate(1912, 6, 32)); }