//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));
}
Пример #2
0
// 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));
}