summaryrefslogtreecommitdiff
path: root/tests/preprocessor_tests/operator_test.cpp
blob: 9acb7f70a3d41911b6acb247a296806bb8253d65 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
//
// 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 "gtest/gtest.h"
#include "Preprocessor.h"
#include "Token.h"

#if GTEST_HAS_PARAM_TEST

struct OperatorTestParam
{
    const char* str;
    int op;
};

class OperatorTest : public testing::TestWithParam<OperatorTestParam>
{
};

TEST_P(OperatorTest, Identified)
{
    OperatorTestParam param = GetParam();

    pp::Token token;
    pp::Preprocessor preprocessor;
    ASSERT_TRUE(preprocessor.init(1, &param.str, 0));
    EXPECT_EQ(param.op, preprocessor.lex(&token));
    EXPECT_EQ(param.op, token.type);
}

static const OperatorTestParam kOperators[] = {
    {"(", '('},
    {")", ')'},
    {"[", '['},
    {"]", ']'},
    {".", '.'},
    {"+", '+'},
    {"-", '-'},
    {"~", '~'},
    {"!", '!'},
    {"*", '*'},
    {"/", '/'},
    {"%", '%'},
    {"<", '<'},
    {">", '>'},
    {"&", '&'},
    {"^", '^'},
    {"|", '|'},
    {"?", '?'},
    {":", ':'},
    {"=", '='},
    {",", ','},
    {"++",  pp::Token::OP_INC},
    {"--",  pp::Token::OP_DEC},
    {"<<",  pp::Token::OP_LEFT},
    {">>",  pp::Token::OP_RIGHT},
    {"<=",  pp::Token::OP_LE},
    {">=",  pp::Token::OP_GE},
    {"==",  pp::Token::OP_EQ},
    {"!=",  pp::Token::OP_NE},
    {"&&",  pp::Token::OP_AND},
    {"^^",  pp::Token::OP_XOR},
    {"||",  pp::Token::OP_OR},
    {"+=",  pp::Token::OP_ADD_ASSIGN},
    {"-=",  pp::Token::OP_SUB_ASSIGN},
    {"*=",  pp::Token::OP_MUL_ASSIGN},
    {"/=",  pp::Token::OP_DIV_ASSIGN},
    {"%=",  pp::Token::OP_MOD_ASSIGN},
    {"<<=", pp::Token::OP_LEFT_ASSIGN},
    {">>=", pp::Token::OP_RIGHT_ASSIGN},
    {"&=",  pp::Token::OP_AND_ASSIGN},
    {"^=",  pp::Token::OP_XOR_ASSIGN},
    {"|=",  pp::Token::OP_OR_ASSIGN}
};

INSTANTIATE_TEST_CASE_P(All, OperatorTest,
                        testing::ValuesIn(kOperators));

#endif  // GTEST_HAS_PARAM_TEST