mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
2a22a3e1f7
--HG-- rename : gfx/angle/src/compiler/compilerdebug.h => gfx/angle/src/compiler/debug.h
171 lines
5.4 KiB
C++
171 lines
5.4 KiB
C++
//
|
|
// 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 "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::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");
|
|
}
|