summaryrefslogtreecommitdiff
path: root/Source/ThirdParty/ANGLE/src/tests/preprocessor_tests/number_test.cpp
diff options
context:
space:
mode:
authorLorry Tar Creator <lorry-tar-importer@lorry>2017-06-27 06:07:23 +0000
committerLorry Tar Creator <lorry-tar-importer@lorry>2017-06-27 06:07:23 +0000
commit1bf1084f2b10c3b47fd1a588d85d21ed0eb41d0c (patch)
tree46dcd36c86e7fbc6e5df36deb463b33e9967a6f7 /Source/ThirdParty/ANGLE/src/tests/preprocessor_tests/number_test.cpp
parent32761a6cee1d0dee366b885b7b9c777e67885688 (diff)
downloadWebKitGtk-tarball-master.tar.gz
Diffstat (limited to 'Source/ThirdParty/ANGLE/src/tests/preprocessor_tests/number_test.cpp')
-rw-r--r--Source/ThirdParty/ANGLE/src/tests/preprocessor_tests/number_test.cpp170
1 files changed, 170 insertions, 0 deletions
diff --git a/Source/ThirdParty/ANGLE/src/tests/preprocessor_tests/number_test.cpp b/Source/ThirdParty/ANGLE/src/tests/preprocessor_tests/number_test.cpp
new file mode 100644
index 000000000..4e295d307
--- /dev/null
+++ b/Source/ThirdParty/ANGLE/src/tests/preprocessor_tests/number_test.cpp
@@ -0,0 +1,170 @@
+//
+// 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 "PreprocessorTest.h"
+#include "compiler/preprocessor/Token.h"
+
+#define CLOSED_RANGE(x, y) testing::Range(x, static_cast<char>((y) + 1))
+
+class InvalidNumberTest : public PreprocessorTest,
+ public testing::WithParamInterface<const char*>
+{
+};
+
+TEST_P(InvalidNumberTest, InvalidNumberIdentified)
+{
+ const char* str = GetParam();
+ ASSERT_TRUE(mPreprocessor.init(1, &str, 0));
+
+ using testing::_;
+ EXPECT_CALL(mDiagnostics, print(pp::Diagnostics::PP_INVALID_NUMBER, _, str));
+
+ pp::Token token;
+ mPreprocessor.lex(&token);
+}
+
+INSTANTIATE_TEST_CASE_P(InvalidIntegers, InvalidNumberTest,
+ testing::Values("1a", "08", "0xG"));
+
+
+INSTANTIATE_TEST_CASE_P(InvalidFloats, InvalidNumberTest,
+ testing::Values("1eg", "0.a", "0.1.2", ".0a", ".0.1"));
+
+typedef std::tr1::tuple<const char*, char> IntegerParams;
+class IntegerTest : public PreprocessorTest,
+ public testing::WithParamInterface<IntegerParams>
+{
+};
+
+TEST_P(IntegerTest, Identified)
+{
+ std::string str(std::tr1::get<0>(GetParam())); // prefix.
+ str.push_back(std::tr1::get<1>(GetParam())); // digit.
+ const char* cstr = str.c_str();
+
+ ASSERT_TRUE(mPreprocessor.init(1, &cstr, 0));
+
+ pp::Token token;
+ mPreprocessor.lex(&token);
+ EXPECT_EQ(pp::Token::CONST_INT, token.type);
+ EXPECT_EQ(str, token.text);
+}
+
+INSTANTIATE_TEST_CASE_P(DecimalInteger,
+ IntegerTest,
+ testing::Combine(testing::Values(""),
+ CLOSED_RANGE('0', '9')));
+
+INSTANTIATE_TEST_CASE_P(OctalInteger,
+ IntegerTest,
+ testing::Combine(testing::Values("0"),
+ CLOSED_RANGE('0', '7')));
+
+INSTANTIATE_TEST_CASE_P(HexadecimalInteger_0_9,
+ IntegerTest,
+ testing::Combine(testing::Values("0x", "0X"),
+ CLOSED_RANGE('0', '9')));
+
+INSTANTIATE_TEST_CASE_P(HexadecimalInteger_a_f,
+ IntegerTest,
+ testing::Combine(testing::Values("0x", "0X"),
+ CLOSED_RANGE('a', 'f')));
+
+INSTANTIATE_TEST_CASE_P(HexadecimalInteger_A_F,
+ IntegerTest,
+ testing::Combine(testing::Values("0x", "0X"),
+ CLOSED_RANGE('A', 'F')));
+
+class FloatTest : public PreprocessorTest
+{
+ protected:
+ void expectFloat(const std::string& str)
+ {
+ const char* cstr = str.c_str();
+ ASSERT_TRUE(mPreprocessor.init(1, &cstr, 0));
+
+ pp::Token token;
+ mPreprocessor.lex(&token);
+ EXPECT_EQ(pp::Token::CONST_FLOAT, token.type);
+ EXPECT_EQ(str, token.text);
+ }
+};
+
+typedef std::tr1::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::tr1::get<0>(GetParam())); // significand [0-9].
+ str.push_back(std::tr1::get<1>(GetParam())); // separator [eE].
+ str.append(std::tr1::get<2>(GetParam())); // sign [" " "+" "-"].
+ str.push_back(std::tr1::get<3>(GetParam())); // exponent [0-9].
+
+ SCOPED_TRACE("FloatScientificTest");
+ expectFloat(str);
+}
+
+INSTANTIATE_TEST_CASE_P(FloatScientific,
+ FloatScientificTest,
+ testing::Combine(CLOSED_RANGE('0', '9'),
+ testing::Values('e', 'E'),
+ testing::Values("", "+", "-"),
+ CLOSED_RANGE('0', '9')));
+
+typedef std::tr1::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::tr1::get<0>(GetParam());
+ if (significand != '\0')
+ str.push_back(significand);
+
+ str.push_back('.');
+
+ char fraction = std::tr1::get<1>(GetParam());
+ if (fraction != '\0')
+ str.push_back(fraction);
+
+ SCOPED_TRACE("FloatFractionTest");
+ expectFloat(str);
+}
+
+INSTANTIATE_TEST_CASE_P(FloatFraction_X_X,
+ FloatFractionTest,
+ testing::Combine(CLOSED_RANGE('0', '9'),
+ CLOSED_RANGE('0', '9')));
+
+INSTANTIATE_TEST_CASE_P(FloatFraction_0_X,
+ FloatFractionTest,
+ testing::Combine(testing::Values('\0'),
+ CLOSED_RANGE('0', '9')));
+
+INSTANTIATE_TEST_CASE_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");
+}