• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2021 The Tint Authors.
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 //     http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14 
15 #include "src/ast/fallthrough_statement.h"
16 #include "src/writer/glsl/test_helper.h"
17 
18 namespace tint {
19 namespace writer {
20 namespace glsl {
21 namespace {
22 
23 using GlslGeneratorImplTest_Case = TestHelper;
24 
TEST_F(GlslGeneratorImplTest_Case,Emit_Case)25 TEST_F(GlslGeneratorImplTest_Case, Emit_Case) {
26   auto* s = Switch(1, Case(Expr(5), Block(create<ast::BreakStatement>())),
27                    DefaultCase());
28   WrapInFunction(s);
29 
30   GeneratorImpl& gen = Build();
31 
32   gen.increment_indent();
33 
34   ASSERT_TRUE(gen.EmitCase(s->body[0])) << gen.error();
35   EXPECT_EQ(gen.result(), R"(  case 5: {
36     break;
37   }
38 )");
39 }
40 
TEST_F(GlslGeneratorImplTest_Case,Emit_Case_BreaksByDefault)41 TEST_F(GlslGeneratorImplTest_Case, Emit_Case_BreaksByDefault) {
42   auto* s = Switch(1, Case(Expr(5), Block()), DefaultCase());
43   WrapInFunction(s);
44 
45   GeneratorImpl& gen = Build();
46 
47   gen.increment_indent();
48 
49   ASSERT_TRUE(gen.EmitCase(s->body[0])) << gen.error();
50   EXPECT_EQ(gen.result(), R"(  case 5: {
51     break;
52   }
53 )");
54 }
55 
TEST_F(GlslGeneratorImplTest_Case,Emit_Case_WithFallthrough)56 TEST_F(GlslGeneratorImplTest_Case, Emit_Case_WithFallthrough) {
57   auto* s = Switch(1, Case(Expr(5), Block(create<ast::FallthroughStatement>())),
58                    DefaultCase());
59   WrapInFunction(s);
60 
61   GeneratorImpl& gen = Build();
62 
63   gen.increment_indent();
64 
65   ASSERT_TRUE(gen.EmitCase(s->body[0])) << gen.error();
66   EXPECT_EQ(gen.result(), R"(  case 5: {
67     /* fallthrough */
68   }
69 )");
70 }
71 
TEST_F(GlslGeneratorImplTest_Case,Emit_Case_MultipleSelectors)72 TEST_F(GlslGeneratorImplTest_Case, Emit_Case_MultipleSelectors) {
73   auto* s =
74       Switch(1, Case({Expr(5), Expr(6)}, Block(create<ast::BreakStatement>())),
75              DefaultCase());
76   WrapInFunction(s);
77 
78   GeneratorImpl& gen = Build();
79 
80   gen.increment_indent();
81 
82   ASSERT_TRUE(gen.EmitCase(s->body[0])) << gen.error();
83   EXPECT_EQ(gen.result(), R"(  case 5:
84   case 6: {
85     break;
86   }
87 )");
88 }
89 
TEST_F(GlslGeneratorImplTest_Case,Emit_Case_Default)90 TEST_F(GlslGeneratorImplTest_Case, Emit_Case_Default) {
91   auto* s = Switch(1, DefaultCase(Block(create<ast::BreakStatement>())));
92   WrapInFunction(s);
93 
94   GeneratorImpl& gen = Build();
95 
96   gen.increment_indent();
97 
98   ASSERT_TRUE(gen.EmitCase(s->body[0])) << gen.error();
99   EXPECT_EQ(gen.result(), R"(  default: {
100     break;
101   }
102 )");
103 }
104 
105 }  // namespace
106 }  // namespace glsl
107 }  // namespace writer
108 }  // namespace tint
109