• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2020 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/hlsl/test_helper.h"
17 
18 namespace tint {
19 namespace writer {
20 namespace hlsl {
21 namespace {
22 
23 using HlslGeneratorImplTest_Case = TestHelper;
24 
TEST_F(HlslGeneratorImplTest_Case,Emit_Case)25 TEST_F(HlslGeneratorImplTest_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, 0)) << gen.error();
35   EXPECT_EQ(gen.result(), R"(  case 5: {
36     break;
37   }
38 )");
39 }
40 
TEST_F(HlslGeneratorImplTest_Case,Emit_Case_BreaksByDefault)41 TEST_F(HlslGeneratorImplTest_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, 0)) << gen.error();
50   EXPECT_EQ(gen.result(), R"(  case 5: {
51     break;
52   }
53 )");
54 }
55 
TEST_F(HlslGeneratorImplTest_Case,Emit_Case_WithFallthrough)56 TEST_F(HlslGeneratorImplTest_Case, Emit_Case_WithFallthrough) {
57   auto* s =
58       Switch(1,                                                          //
59              Case(Expr(4), Block(create<ast::FallthroughStatement>())),  //
60              Case(Expr(5), Block(create<ast::ReturnStatement>())),       //
61              DefaultCase());
62   WrapInFunction(s);
63 
64   GeneratorImpl& gen = Build();
65 
66   gen.increment_indent();
67 
68   ASSERT_TRUE(gen.EmitCase(s, 0)) << gen.error();
69   EXPECT_EQ(gen.result(), R"(  case 4: {
70     /* fallthrough */
71     {
72       return;
73     }
74     break;
75   }
76 )");
77 }
78 
TEST_F(HlslGeneratorImplTest_Case,Emit_Case_MultipleSelectors)79 TEST_F(HlslGeneratorImplTest_Case, Emit_Case_MultipleSelectors) {
80   auto* s =
81       Switch(1, Case({Expr(5), Expr(6)}, Block(create<ast::BreakStatement>())),
82              DefaultCase());
83   WrapInFunction(s);
84 
85   GeneratorImpl& gen = Build();
86 
87   gen.increment_indent();
88 
89   ASSERT_TRUE(gen.EmitCase(s, 0)) << gen.error();
90   EXPECT_EQ(gen.result(), R"(  case 5:
91   case 6: {
92     break;
93   }
94 )");
95 }
96 
TEST_F(HlslGeneratorImplTest_Case,Emit_Case_Default)97 TEST_F(HlslGeneratorImplTest_Case, Emit_Case_Default) {
98   auto* s = Switch(1, DefaultCase(Block(create<ast::BreakStatement>())));
99   WrapInFunction(s);
100 
101   GeneratorImpl& gen = Build();
102 
103   gen.increment_indent();
104 
105   ASSERT_TRUE(gen.EmitCase(s, 0)) << gen.error();
106   EXPECT_EQ(gen.result(), R"(  default: {
107     break;
108   }
109 )");
110 }
111 
112 }  // namespace
113 }  // namespace hlsl
114 }  // namespace writer
115 }  // namespace tint
116