Edit

kc3-lang/angle/src/tests/preprocessor_tests/number_test.cpp

Branch :

  • Show log

    Commit

  • Author : Victor Costan
    Date : 2019-02-20 10:45:24
    Hash : ffd39978
    Message : test: Replace _TEST_CASE_ with _TEST_SUITE_. Googletest is (at last) converging with industry-standard terminology [1]. We previously called test suites "test cases", which was rather confusing for folks coming from any other testing framework. Chrome now has a googletest version that supports _TEST_SUITE_ macros instead of _TEST_CASE_, so this CL cleans up some of the outdated usage. [1] https://github.com/google/googletest/blob/master/googletest/docs/primer.md#beware-of-the-nomenclature Bug: chromium:925652 Change-Id: Ia0deec0bc4216ef1adabc33985a7cbda89682608 Reviewed-on: https://chromium-review.googlesource.com/c/1477418 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Victor Costan <pwnall@chromium.org>

  • src/tests/preprocessor_tests/number_test.cpp
  • //
    // Copyright (c) 2012 The ANGLE Project Authors. All rights reserved.
    // Use of this source code is governed by a BSD-style license that can be
    // found in the LICENSE file.
    //
    
    #include <tuple>
    
    #include "PreprocessorTest.h"
    #include "compiler/preprocessor/Token.h"
    
    namespace angle
    {
    
    #define CLOSED_RANGE(x, y) testing::Range(x, static_cast<char>((y) + 1))
    
    class InvalidNumberTest : public SimplePreprocessorTest,
                              public testing::WithParamInterface<const char *>
    {};
    
    TEST_P(InvalidNumberTest, InvalidNumberIdentified)
    {
        const char *str = GetParam();
    
        using testing::_;
        EXPECT_CALL(mDiagnostics, print(pp::Diagnostics::PP_INVALID_NUMBER, _, str));
    
        preprocess(str);
    }
    
    INSTANTIATE_TEST_SUITE_P(InvalidIntegers, InvalidNumberTest, testing::Values("1a", "08", "0xG"));
    
    INSTANTIATE_TEST_SUITE_P(InvalidFloats,
                             InvalidNumberTest,
                             testing::Values("1eg", "0.a", "0.1.2", ".0a", ".0.1"));
    
    typedef std::tuple<const char *, char> IntegerParams;
    class IntegerTest : public SimplePreprocessorTest, public testing::WithParamInterface<IntegerParams>
    {};
    
    TEST_P(IntegerTest, Identified)
    {
        std::string str(std::get<0>(GetParam()));  // prefix.
        str.push_back(std::get<1>(GetParam()));    // digit.
        const char *cstr = str.c_str();
    
        pp::Token token;
        lexSingleToken(cstr, &token);
        EXPECT_EQ(pp::Token::CONST_INT, token.type);
        EXPECT_EQ(str, token.text);
    }
    
    INSTANTIATE_TEST_SUITE_P(DecimalInteger,
                             IntegerTest,
                             testing::Combine(testing::Values(""), CLOSED_RANGE('0', '9')));
    
    INSTANTIATE_TEST_SUITE_P(OctalInteger,
                             IntegerTest,
                             testing::Combine(testing::Values("0"), CLOSED_RANGE('0', '7')));
    
    INSTANTIATE_TEST_SUITE_P(HexadecimalInteger_0_9,
                             IntegerTest,
                             testing::Combine(testing::Values("0x", "0X"), CLOSED_RANGE('0', '9')));
    
    INSTANTIATE_TEST_SUITE_P(HexadecimalInteger_a_f,
                             IntegerTest,
                             testing::Combine(testing::Values("0x", "0X"), CLOSED_RANGE('a', 'f')));
    
    INSTANTIATE_TEST_SUITE_P(HexadecimalInteger_A_F,
                             IntegerTest,
                             testing::Combine(testing::Values("0x", "0X"), CLOSED_RANGE('A', 'F')));
    
    class FloatTest : public SimplePreprocessorTest
    {
      protected:
        void expectFloat(const std::string &str)
        {
            const char *cstr = str.c_str();
    
            pp::Token token;
            lexSingleToken(cstr, &token);
            EXPECT_EQ(pp::Token::CONST_FLOAT, token.type);
            EXPECT_EQ(str, token.text);
        }
    };
    
    typedef std::tuple<char, char, const char *, char> FloatScientificParams;
    class FloatScientificTest : public FloatTest,
                                public testing::WithParamInterface<FloatScientificParams>
    {};
    
    // This test covers floating point numbers of form [0-9][eE][+-]?[0-9].
    TEST_P(FloatScientificTest, FloatIdentified)
    {
        std::string str;
        str.push_back(std::get<0>(GetParam()));  // significand [0-9].
        str.push_back(std::get<1>(GetParam()));  // separator [eE].
        str.append(std::get<2>(GetParam()));     // sign [" " "+" "-"].
        str.push_back(std::get<3>(GetParam()));  // exponent [0-9].
    
        SCOPED_TRACE("FloatScientificTest");
        expectFloat(str);
    }
    
    INSTANTIATE_TEST_SUITE_P(FloatScientific,
                             FloatScientificTest,
                             testing::Combine(CLOSED_RANGE('0', '9'),
                                              testing::Values('e', 'E'),
                                              testing::Values("", "+", "-"),
                                              CLOSED_RANGE('0', '9')));
    
    typedef std::tuple<char, char> FloatFractionParams;
    class FloatFractionTest : public FloatTest, public testing::WithParamInterface<FloatFractionParams>
    {};
    
    // This test covers floating point numbers of form [0-9]"." and [0-9]?"."[0-9].
    TEST_P(FloatFractionTest, FloatIdentified)
    {
        std::string str;
    
        char significand = std::get<0>(GetParam());
        if (significand != '\0')
            str.push_back(significand);
    
        str.push_back('.');
    
        char fraction = std::get<1>(GetParam());
        if (fraction != '\0')
            str.push_back(fraction);
    
        SCOPED_TRACE("FloatFractionTest");
        expectFloat(str);
    }
    
    INSTANTIATE_TEST_SUITE_P(FloatFraction_X_X,
                             FloatFractionTest,
                             testing::Combine(CLOSED_RANGE('0', '9'), CLOSED_RANGE('0', '9')));
    
    INSTANTIATE_TEST_SUITE_P(FloatFraction_0_X,
                             FloatFractionTest,
                             testing::Combine(testing::Values('\0'), CLOSED_RANGE('0', '9')));
    
    INSTANTIATE_TEST_SUITE_P(FloatFraction_X_0,
                             FloatFractionTest,
                             testing::Combine(CLOSED_RANGE('0', '9'), testing::Values('\0')));
    
    // In the tests above we have tested individual parts of a float separately.
    // This test has all parts of a float.
    TEST_F(FloatTest, FractionScientific)
    {
        SCOPED_TRACE("FractionScientific");
        expectFloat("0.1e+2");
    }
    
    }  // namespace angle