blob: 575db417da7608bfa6ac42fa3314426eee818fdd [file] [log] [blame]
Ryan Harrisondbc13af2022-02-21 15:19:07 +00001// 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/tint/sem/test_helper.h"
Ben Clayton01004b72022-04-28 18:49:04 +000016#include "src/tint/sem/texture.h"
Ryan Harrisondbc13af2022-02-21 15:19:07 +000017
dan sinclairc990b3c2022-04-07 16:04:35 +000018namespace tint::sem {
Ryan Harrisondbc13af2022-02-21 15:19:07 +000019namespace {
20
21using PointerTest = TestHelper;
22
23TEST_F(PointerTest, Creation) {
dan sinclair41e4d9a2022-05-01 14:40:55 +000024 auto* a = create<Pointer>(create<I32>(), ast::StorageClass::kStorage, ast::Access::kReadWrite);
25 auto* b = create<Pointer>(create<I32>(), ast::StorageClass::kStorage, ast::Access::kReadWrite);
26 auto* c = create<Pointer>(create<F32>(), ast::StorageClass::kStorage, ast::Access::kReadWrite);
27 auto* d = create<Pointer>(create<I32>(), ast::StorageClass::kPrivate, ast::Access::kReadWrite);
28 auto* e = create<Pointer>(create<I32>(), ast::StorageClass::kStorage, ast::Access::kRead);
Ben Claytondc0e31c2022-03-07 18:34:57 +000029
dan sinclair41e4d9a2022-05-01 14:40:55 +000030 EXPECT_TRUE(a->StoreType()->Is<sem::I32>());
31 EXPECT_EQ(a->StorageClass(), ast::StorageClass::kStorage);
32 EXPECT_EQ(a->Access(), ast::Access::kReadWrite);
Ben Claytondc0e31c2022-03-07 18:34:57 +000033
dan sinclair41e4d9a2022-05-01 14:40:55 +000034 EXPECT_EQ(a, b);
35 EXPECT_NE(a, c);
36 EXPECT_NE(a, d);
37 EXPECT_NE(a, e);
Ryan Harrisondbc13af2022-02-21 15:19:07 +000038}
39
Ben Claytondc0e31c2022-03-07 18:34:57 +000040TEST_F(PointerTest, Hash) {
dan sinclair41e4d9a2022-05-01 14:40:55 +000041 auto* a = create<Pointer>(create<I32>(), ast::StorageClass::kStorage, ast::Access::kReadWrite);
42 auto* b = create<Pointer>(create<I32>(), ast::StorageClass::kStorage, ast::Access::kReadWrite);
43 auto* c = create<Pointer>(create<F32>(), ast::StorageClass::kStorage, ast::Access::kReadWrite);
44 auto* d = create<Pointer>(create<I32>(), ast::StorageClass::kPrivate, ast::Access::kReadWrite);
45 auto* e = create<Pointer>(create<I32>(), ast::StorageClass::kStorage, ast::Access::kRead);
Ben Claytondc0e31c2022-03-07 18:34:57 +000046
dan sinclair41e4d9a2022-05-01 14:40:55 +000047 EXPECT_EQ(a->Hash(), b->Hash());
48 EXPECT_NE(a->Hash(), c->Hash());
49 EXPECT_NE(a->Hash(), d->Hash());
50 EXPECT_NE(a->Hash(), e->Hash());
Ben Claytondc0e31c2022-03-07 18:34:57 +000051}
52
53TEST_F(PointerTest, Equals) {
dan sinclair41e4d9a2022-05-01 14:40:55 +000054 auto* a = create<Pointer>(create<I32>(), ast::StorageClass::kStorage, ast::Access::kReadWrite);
55 auto* b = create<Pointer>(create<I32>(), ast::StorageClass::kStorage, ast::Access::kReadWrite);
56 auto* c = create<Pointer>(create<F32>(), ast::StorageClass::kStorage, ast::Access::kReadWrite);
57 auto* d = create<Pointer>(create<I32>(), ast::StorageClass::kPrivate, ast::Access::kReadWrite);
58 auto* e = create<Pointer>(create<I32>(), ast::StorageClass::kStorage, ast::Access::kRead);
Ben Claytondc0e31c2022-03-07 18:34:57 +000059
dan sinclair41e4d9a2022-05-01 14:40:55 +000060 EXPECT_TRUE(a->Equals(*b));
61 EXPECT_FALSE(a->Equals(*c));
62 EXPECT_FALSE(a->Equals(*d));
63 EXPECT_FALSE(a->Equals(*e));
64 EXPECT_FALSE(a->Equals(Void{}));
Ryan Harrisondbc13af2022-02-21 15:19:07 +000065}
66
67TEST_F(PointerTest, FriendlyName) {
dan sinclair41e4d9a2022-05-01 14:40:55 +000068 auto* r = create<Pointer>(create<I32>(), ast::StorageClass::kNone, ast::Access::kRead);
69 EXPECT_EQ(r->FriendlyName(Symbols()), "ptr<i32, read>");
Ryan Harrisondbc13af2022-02-21 15:19:07 +000070}
71
72TEST_F(PointerTest, FriendlyNameWithStorageClass) {
dan sinclair41e4d9a2022-05-01 14:40:55 +000073 auto* r = create<Pointer>(create<I32>(), ast::StorageClass::kWorkgroup, ast::Access::kRead);
74 EXPECT_EQ(r->FriendlyName(Symbols()), "ptr<workgroup, i32, read>");
Ryan Harrisondbc13af2022-02-21 15:19:07 +000075}
76
77} // namespace
dan sinclairc990b3c2022-04-07 16:04:35 +000078} // namespace tint::sem