ca79e8ac8b6e33099d5d18e5f386ecc5ecb72db3
[platform/upstream/nodejs.git] / deps / v8 / test / unittests / compiler / opcodes-unittest.cc
1 // Copyright 2015 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "src/compiler/opcodes.h"
6 #include "testing/gtest/include/gtest/gtest.h"
7
8 namespace v8 {
9 namespace internal {
10 namespace compiler {
11
12 namespace {
13
14 bool IsCommonOpcode(IrOpcode::Value opcode) {
15   switch (opcode) {
16 #define OPCODE(Opcode)      \
17   case IrOpcode::k##Opcode: \
18     return true;
19     COMMON_OP_LIST(OPCODE)
20     CONTROL_OP_LIST(OPCODE)
21 #undef OPCODE
22     default:
23       return false;
24   }
25 }
26
27
28 bool IsControlOpcode(IrOpcode::Value opcode) {
29   switch (opcode) {
30 #define OPCODE(Opcode)      \
31   case IrOpcode::k##Opcode: \
32     return true;
33     CONTROL_OP_LIST(OPCODE)
34 #undef OPCODE
35     default:
36       return false;
37   }
38 }
39
40
41 bool IsJsOpcode(IrOpcode::Value opcode) {
42   switch (opcode) {
43 #define OPCODE(Opcode)      \
44   case IrOpcode::k##Opcode: \
45     return true;
46     JS_OP_LIST(OPCODE)
47 #undef OPCODE
48     default:
49       return false;
50   }
51 }
52
53
54 bool IsConstantOpcode(IrOpcode::Value opcode) {
55   switch (opcode) {
56 #define OPCODE(Opcode)      \
57   case IrOpcode::k##Opcode: \
58     return true;
59     CONSTANT_OP_LIST(OPCODE)
60 #undef OPCODE
61     default:
62       return false;
63   }
64 }
65
66
67 const IrOpcode::Value kInvalidOpcode = static_cast<IrOpcode::Value>(123456789);
68
69 }  // namespace
70
71
72 TEST(IrOpcodeTest, IsCommonOpcode) {
73   EXPECT_FALSE(IrOpcode::IsCommonOpcode(kInvalidOpcode));
74 #define OPCODE(Opcode)                           \
75   EXPECT_EQ(IsCommonOpcode(IrOpcode::k##Opcode), \
76             IrOpcode::IsCommonOpcode(IrOpcode::k##Opcode));
77   ALL_OP_LIST(OPCODE)
78 #undef OPCODE
79 }
80
81
82 TEST(IrOpcodeTest, IsControlOpcode) {
83   EXPECT_FALSE(IrOpcode::IsControlOpcode(kInvalidOpcode));
84 #define OPCODE(Opcode)                            \
85   EXPECT_EQ(IsControlOpcode(IrOpcode::k##Opcode), \
86             IrOpcode::IsControlOpcode(IrOpcode::k##Opcode));
87   ALL_OP_LIST(OPCODE)
88 #undef OPCODE
89 }
90
91
92 TEST(IrOpcodeTest, IsJsOpcode) {
93   EXPECT_FALSE(IrOpcode::IsJsOpcode(kInvalidOpcode));
94 #define OPCODE(Opcode)                       \
95   EXPECT_EQ(IsJsOpcode(IrOpcode::k##Opcode), \
96             IrOpcode::IsJsOpcode(IrOpcode::k##Opcode));
97   ALL_OP_LIST(OPCODE)
98 #undef OPCODE
99 }
100
101
102 TEST(IrOpcodeTest, IsConstantOpcode) {
103   EXPECT_FALSE(IrOpcode::IsConstantOpcode(kInvalidOpcode));
104 #define OPCODE(Opcode)                             \
105   EXPECT_EQ(IsConstantOpcode(IrOpcode::k##Opcode), \
106             IrOpcode::IsConstantOpcode(IrOpcode::k##Opcode));
107   ALL_OP_LIST(OPCODE)
108 #undef OPCODE
109 }
110
111
112 TEST(IrOpcodeTest, Mnemonic) {
113   EXPECT_STREQ("UnknownOpcode", IrOpcode::Mnemonic(kInvalidOpcode));
114 #define OPCODE(Opcode) \
115   EXPECT_STREQ(#Opcode, IrOpcode::Mnemonic(IrOpcode::k##Opcode));
116   ALL_OP_LIST(OPCODE)
117 #undef OPCODE
118 }
119
120 }  // namespace compiler
121 }  // namespace internal
122 }  // namespace v8