• 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/resolver/resolver.h"
16 
17 #include "gmock/gmock.h"
18 #include "src/resolver/resolver_test_helper.h"
19 #include "src/sem/atomic_type.h"
20 
21 namespace tint {
22 namespace resolver {
23 namespace {
24 
25 using ResolverIsHostShareable = ResolverTest;
26 
TEST_F(ResolverIsHostShareable,Void)27 TEST_F(ResolverIsHostShareable, Void) {
28   EXPECT_FALSE(r()->IsHostShareable(create<sem::Void>()));
29 }
30 
TEST_F(ResolverIsHostShareable,Bool)31 TEST_F(ResolverIsHostShareable, Bool) {
32   EXPECT_FALSE(r()->IsHostShareable(create<sem::Bool>()));
33 }
34 
TEST_F(ResolverIsHostShareable,NumericScalar)35 TEST_F(ResolverIsHostShareable, NumericScalar) {
36   EXPECT_TRUE(r()->IsHostShareable(create<sem::I32>()));
37   EXPECT_TRUE(r()->IsHostShareable(create<sem::U32>()));
38   EXPECT_TRUE(r()->IsHostShareable(create<sem::F32>()));
39 }
40 
TEST_F(ResolverIsHostShareable,NumericVector)41 TEST_F(ResolverIsHostShareable, NumericVector) {
42   EXPECT_TRUE(r()->IsHostShareable(create<sem::Vector>(create<sem::I32>(), 2)));
43   EXPECT_TRUE(r()->IsHostShareable(create<sem::Vector>(create<sem::I32>(), 3)));
44   EXPECT_TRUE(r()->IsHostShareable(create<sem::Vector>(create<sem::I32>(), 4)));
45   EXPECT_TRUE(r()->IsHostShareable(create<sem::Vector>(create<sem::U32>(), 2)));
46   EXPECT_TRUE(r()->IsHostShareable(create<sem::Vector>(create<sem::U32>(), 3)));
47   EXPECT_TRUE(r()->IsHostShareable(create<sem::Vector>(create<sem::U32>(), 4)));
48   EXPECT_TRUE(r()->IsHostShareable(create<sem::Vector>(create<sem::F32>(), 2)));
49   EXPECT_TRUE(r()->IsHostShareable(create<sem::Vector>(create<sem::F32>(), 3)));
50   EXPECT_TRUE(r()->IsHostShareable(create<sem::Vector>(create<sem::F32>(), 4)));
51 }
52 
TEST_F(ResolverIsHostShareable,BoolVector)53 TEST_F(ResolverIsHostShareable, BoolVector) {
54   EXPECT_FALSE(
55       r()->IsHostShareable(create<sem::Vector>(create<sem::Bool>(), 2)));
56   EXPECT_FALSE(
57       r()->IsHostShareable(create<sem::Vector>(create<sem::Bool>(), 3)));
58   EXPECT_FALSE(
59       r()->IsHostShareable(create<sem::Vector>(create<sem::Bool>(), 4)));
60   EXPECT_FALSE(
61       r()->IsHostShareable(create<sem::Vector>(create<sem::Bool>(), 2)));
62   EXPECT_FALSE(
63       r()->IsHostShareable(create<sem::Vector>(create<sem::Bool>(), 3)));
64   EXPECT_FALSE(
65       r()->IsHostShareable(create<sem::Vector>(create<sem::Bool>(), 4)));
66   EXPECT_FALSE(
67       r()->IsHostShareable(create<sem::Vector>(create<sem::Bool>(), 2)));
68   EXPECT_FALSE(
69       r()->IsHostShareable(create<sem::Vector>(create<sem::Bool>(), 3)));
70   EXPECT_FALSE(
71       r()->IsHostShareable(create<sem::Vector>(create<sem::Bool>(), 4)));
72 }
73 
TEST_F(ResolverIsHostShareable,Matrix)74 TEST_F(ResolverIsHostShareable, Matrix) {
75   auto* vec2 = create<sem::Vector>(create<sem::F32>(), 2);
76   auto* vec3 = create<sem::Vector>(create<sem::F32>(), 3);
77   auto* vec4 = create<sem::Vector>(create<sem::F32>(), 4);
78 
79   EXPECT_TRUE(r()->IsHostShareable(create<sem::Matrix>(vec2, 2)));
80   EXPECT_TRUE(r()->IsHostShareable(create<sem::Matrix>(vec2, 3)));
81   EXPECT_TRUE(r()->IsHostShareable(create<sem::Matrix>(vec2, 4)));
82   EXPECT_TRUE(r()->IsHostShareable(create<sem::Matrix>(vec3, 2)));
83   EXPECT_TRUE(r()->IsHostShareable(create<sem::Matrix>(vec3, 3)));
84   EXPECT_TRUE(r()->IsHostShareable(create<sem::Matrix>(vec3, 4)));
85   EXPECT_TRUE(r()->IsHostShareable(create<sem::Matrix>(vec4, 2)));
86   EXPECT_TRUE(r()->IsHostShareable(create<sem::Matrix>(vec4, 3)));
87   EXPECT_TRUE(r()->IsHostShareable(create<sem::Matrix>(vec4, 4)));
88 }
89 
TEST_F(ResolverIsHostShareable,Pointer)90 TEST_F(ResolverIsHostShareable, Pointer) {
91   auto* ptr = create<sem::Pointer>(
92       create<sem::I32>(), ast::StorageClass::kPrivate, ast::Access::kReadWrite);
93   EXPECT_FALSE(r()->IsHostShareable(ptr));
94 }
95 
TEST_F(ResolverIsHostShareable,Atomic)96 TEST_F(ResolverIsHostShareable, Atomic) {
97   EXPECT_TRUE(r()->IsHostShareable(create<sem::Atomic>(create<sem::I32>())));
98   EXPECT_TRUE(r()->IsHostShareable(create<sem::Atomic>(create<sem::U32>())));
99 }
100 
TEST_F(ResolverIsHostShareable,ArraySizedOfHostShareable)101 TEST_F(ResolverIsHostShareable, ArraySizedOfHostShareable) {
102   auto* arr = create<sem::Array>(create<sem::I32>(), 5, 4, 20, 4, 4);
103   EXPECT_TRUE(r()->IsHostShareable(arr));
104 }
105 
TEST_F(ResolverIsHostShareable,ArrayUnsizedOfHostShareable)106 TEST_F(ResolverIsHostShareable, ArrayUnsizedOfHostShareable) {
107   auto* arr = create<sem::Array>(create<sem::I32>(), 0, 4, 4, 4, 4);
108   EXPECT_TRUE(r()->IsHostShareable(arr));
109 }
110 
111 // Note: Structure tests covered in host_shareable_validation_test.cc
112 
113 }  // namespace
114 }  // namespace resolver
115 }  // namespace tint
116