1//
2// Copyright (c) 2012 The ANGLE Project Authors. All rights reserved.
3// Use of this source code is governed by a BSD-style license that can be
4// found in the LICENSE file.
5//
6
7#include "PreprocessorTest.h"
8#include "Token.h"
9
10struct OperatorTestParam
11{
12    const char* str;
13    int op;
14};
15
16class OperatorTest : public PreprocessorTest,
17                     public testing::WithParamInterface<OperatorTestParam>
18{
19};
20
21TEST_P(OperatorTest, Identified)
22{
23    OperatorTestParam param = GetParam();
24
25    ASSERT_TRUE(mPreprocessor.init(1, &param.str, 0));
26
27    pp::Token token;
28    mPreprocessor.lex(&token);
29    EXPECT_EQ(param.op, token.type);
30    EXPECT_EQ(param.str, token.text);
31}
32
33static const OperatorTestParam kOperators[] = {
34    {"(", '('},
35    {")", ')'},
36    {"[", '['},
37    {"]", ']'},
38    {".", '.'},
39    {"+", '+'},
40    {"-", '-'},
41    {"~", '~'},
42    {"!", '!'},
43    {"*", '*'},
44    {"/", '/'},
45    {"%", '%'},
46    {"<", '<'},
47    {">", '>'},
48    {"&", '&'},
49    {"^", '^'},
50    {"|", '|'},
51    {"?", '?'},
52    {":", ':'},
53    {"=", '='},
54    {",", ','},
55    {"++",  pp::Token::OP_INC},
56    {"--",  pp::Token::OP_DEC},
57    {"<<",  pp::Token::OP_LEFT},
58    {">>",  pp::Token::OP_RIGHT},
59    {"<=",  pp::Token::OP_LE},
60    {">=",  pp::Token::OP_GE},
61    {"==",  pp::Token::OP_EQ},
62    {"!=",  pp::Token::OP_NE},
63    {"&&",  pp::Token::OP_AND},
64    {"^^",  pp::Token::OP_XOR},
65    {"||",  pp::Token::OP_OR},
66    {"+=",  pp::Token::OP_ADD_ASSIGN},
67    {"-=",  pp::Token::OP_SUB_ASSIGN},
68    {"*=",  pp::Token::OP_MUL_ASSIGN},
69    {"/=",  pp::Token::OP_DIV_ASSIGN},
70    {"%=",  pp::Token::OP_MOD_ASSIGN},
71    {"<<=", pp::Token::OP_LEFT_ASSIGN},
72    {">>=", pp::Token::OP_RIGHT_ASSIGN},
73    {"&=",  pp::Token::OP_AND_ASSIGN},
74    {"^=",  pp::Token::OP_XOR_ASSIGN},
75    {"|=",  pp::Token::OP_OR_ASSIGN}
76};
77
78INSTANTIATE_TEST_CASE_P(All, OperatorTest,
79                        testing::ValuesIn(kOperators));
80
81