blob: 6143f0ac3a0767351bceda5329e333d596a479d9 [file] [log] [blame]
Austin Engcc2516a2023-10-17 20:57:54 +00001// Copyright 2021 The Dawn & Tint Authors
Ben Clayton7f2b8cd2022-05-18 22:41:48 +00002//
Austin Engcc2516a2023-10-17 20:57:54 +00003// Redistribution and use in source and binary forms, with or without
4// modification, are permitted provided that the following conditions are met:
Ben Clayton7f2b8cd2022-05-18 22:41:48 +00005//
Austin Engcc2516a2023-10-17 20:57:54 +00006// 1. Redistributions of source code must retain the above copyright notice, this
7// list of conditions and the following disclaimer.
Ben Clayton7f2b8cd2022-05-18 22:41:48 +00008//
Austin Engcc2516a2023-10-17 20:57:54 +00009// 2. Redistributions in binary form must reproduce the above copyright notice,
10// this list of conditions and the following disclaimer in the documentation
11// and/or other materials provided with the distribution.
12//
13// 3. Neither the name of the copyright holder nor the names of its
14// contributors may be used to endorse or promote products derived from
15// this software without specific prior written permission.
16//
17// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
18// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
20// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
21// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
23// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
24// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
25// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Ben Clayton7f2b8cd2022-05-18 22:41:48 +000027
Ben Claytonf50d56a2022-07-27 18:32:19 +000028////////////////////////////////////////////////////////////////////////////////
Ben Clayton57ded6a2023-08-22 13:22:22 +000029// File generated by 'tools/src/cmd/gen' using the template:
Ben Clayton11653892023-09-19 19:15:59 +000030// src/tint/lang/wgsl/extension_test.cc.tmpl
Ben Claytonf50d56a2022-07-27 18:32:19 +000031//
Ben Clayton57ded6a2023-08-22 13:22:22 +000032// To regenerate run: './tools/run gen'
33//
34// Do not modify this file directly
Ben Claytonf50d56a2022-07-27 18:32:19 +000035////////////////////////////////////////////////////////////////////////////////
36
Ben Clayton11653892023-09-19 19:15:59 +000037#include "src/tint/lang/wgsl/extension.h"
dan sinclaire4039c72023-02-17 21:58:59 +000038
39#include <gtest/gtest.h>
Ben Clayton7f2b8cd2022-05-18 22:41:48 +000040
Ben Claytonf50d56a2022-07-27 18:32:19 +000041#include <string>
42
dan sinclair22b4dd22023-07-21 00:40:07 +000043#include "src/tint/utils/text/string.h"
Ben Clayton7f2b8cd2022-05-18 22:41:48 +000044
Ben Clayton11653892023-09-19 19:15:59 +000045namespace tint::wgsl {
Ben Clayton7f2b8cd2022-05-18 22:41:48 +000046namespace {
47
Ben Claytonf50d56a2022-07-27 18:32:19 +000048namespace parse_print_tests {
49
50struct Case {
51 const char* string;
52 Extension value;
53};
54
55inline std::ostream& operator<<(std::ostream& out, Case c) {
56 return out << "'" << std::string(c.string) << "'";
Ben Clayton7f2b8cd2022-05-18 22:41:48 +000057}
58
Ben Claytonf50d56a2022-07-27 18:32:19 +000059static constexpr Case kValidCases[] = {
Ben Claytonf50d56a2022-07-27 18:32:19 +000060 {"chromium_disable_uniformity_analysis", Extension::kChromiumDisableUniformityAnalysis},
Ben Clayton3e56a382023-11-09 16:22:33 +000061 {"chromium_experimental_framebuffer_fetch", Extension::kChromiumExperimentalFramebufferFetch},
Ben Clayton74688c92023-09-05 13:35:35 +000062 {"chromium_experimental_pixel_local", Extension::kChromiumExperimentalPixelLocal},
dan sinclair4abf28e2022-08-02 15:55:35 +000063 {"chromium_experimental_push_constant", Extension::kChromiumExperimentalPushConstant},
James Price3b97fc42023-08-01 08:08:34 +000064 {"chromium_experimental_subgroups", Extension::kChromiumExperimentalSubgroups},
Ben Claytone4d210d2024-02-26 17:08:02 +000065 {"chromium_internal_graphite", Extension::kChromiumInternalGraphite},
Le Hoang Quyenf9a99182024-05-22 21:02:35 +000066 {"chromium_internal_input_attachments", Extension::kChromiumInternalInputAttachments},
James Price0b3400c2023-02-27 18:39:20 +000067 {"chromium_internal_relaxed_uniform_layout", Extension::kChromiumInternalRelaxedUniformLayout},
Jiawei Shaocc43f152024-05-29 00:44:43 +000068 {"dual_source_blending", Extension::kDualSourceBlending},
Ben Claytondb368f12022-10-11 18:26:18 +000069 {"f16", Extension::kF16},
James Price32950eb2024-06-26 11:25:37 +000070 {"subgroups", Extension::kSubgroups},
71 {"subgroups_f16", Extension::kSubgroupsF16},
Ben Claytonf50d56a2022-07-27 18:32:19 +000072};
73
74static constexpr Case kInvalidCases[] = {
Ben Claytond2e0db32022-10-12 18:49:15 +000075 {"chromium_disableuniformiccy_analysis", Extension::kUndefined},
76 {"chromil3_disable_unifority_analss", Extension::kUndefined},
77 {"chromium_disable_Vniformity_analysis", Extension::kUndefined},
Jiawei Shao53c0fa92023-12-08 01:24:00 +000078 {"chromium_experimental_framebuf1er_fetch", Extension::kUndefined},
79 {"chromium_experiqqntal_framebuffer_fetch", Extension::kUndefined},
80 {"chromium_experimental_framebuffll77_fetch", Extension::kUndefined},
Ben Claytonf4686672024-01-17 11:06:59 +000081 {"chroqqppum_expermental_pixel_HHocal", Extension::kUndefined},
82 {"chromium_experimenta_piel_occl", Extension::kUndefined},
83 {"chromium_exeGimental_pixel_local", Extension::kUndefined},
84 {"chvomium_experimental_push_constiint", Extension::kUndefined},
85 {"chromiu8WWexperimental_push_constant", Extension::kUndefined},
86 {"chromium_experiMental_push_costanxx", Extension::kUndefined},
87 {"chromiuX_experimentl_sugggroups", Extension::kUndefined},
88 {"chromiu_exuerimntal_XVbgroups", Extension::kUndefined},
89 {"chromium_experimen3al_subgroups", Extension::kUndefined},
Jiawei Shaocd4bf9a2024-06-06 01:17:28 +000090 {"chromium_internal_graphitE", Extension::kUndefined},
91 {"chromium_nternal_gTTPaphite", Extension::kUndefined},
92 {"chxxdomium_interal_graphite", Extension::kUndefined},
93 {"c44romium_internal_input_attachments", Extension::kUndefined},
94 {"chromium_internal_inputSSaVVtachments", Extension::kUndefined},
95 {"chrom22Rm_internal_input_atRchments", Extension::kUndefined},
96 {"chromium_int9rnal_relaxed_Fnifor_layout", Extension::kUndefined},
97 {"chrmium_internal_relaxed_uniform_layout", Extension::kUndefined},
98 {"VRhHomium_internal_relaxd_uniform_OOayout", Extension::kUndefined},
99 {"dual_souyce_bleding", Extension::kUndefined},
100 {"dualrrllnource_blendiG77", Extension::kUndefined},
101 {"dual00source_ble4ding", Extension::kUndefined},
102 {"5", Extension::kUndefined},
103 {"u16", Extension::kUndefined},
104 {"f", Extension::kUndefined},
James Price32950eb2024-06-26 11:25:37 +0000105 {"skkkgroups", Extension::kUndefined},
106 {"siibgrop", Extension::kUndefined},
107 {"subgroupXX", Extension::kUndefined},
108 {"subII9rnn55ps_f16", Extension::kUndefined},
109 {"YubHHrouaas_SSr16", Extension::kUndefined},
110 {"subgupkkHf1", Extension::kUndefined},
Ben Claytonf50d56a2022-07-27 18:32:19 +0000111};
112
113using ExtensionParseTest = testing::TestWithParam<Case>;
114
115TEST_P(ExtensionParseTest, Parse) {
116 const char* string = GetParam().string;
117 Extension expect = GetParam().value;
118 EXPECT_EQ(expect, ParseExtension(string));
Ben Clayton7f2b8cd2022-05-18 22:41:48 +0000119}
120
Ben Claytonf50d56a2022-07-27 18:32:19 +0000121INSTANTIATE_TEST_SUITE_P(ValidCases, ExtensionParseTest, testing::ValuesIn(kValidCases));
122INSTANTIATE_TEST_SUITE_P(InvalidCases, ExtensionParseTest, testing::ValuesIn(kInvalidCases));
123
124using ExtensionPrintTest = testing::TestWithParam<Case>;
125
126TEST_P(ExtensionPrintTest, Print) {
127 Extension value = GetParam().value;
128 const char* expect = GetParam().string;
Ben Clayton3c54ba52023-11-28 21:36:08 +0000129 EXPECT_EQ(expect, ToString(value));
Ben Claytonf50d56a2022-07-27 18:32:19 +0000130}
131
132INSTANTIATE_TEST_SUITE_P(ValidCases, ExtensionPrintTest, testing::ValuesIn(kValidCases));
133
134} // namespace parse_print_tests
135
Ben Clayton7f2b8cd2022-05-18 22:41:48 +0000136} // namespace
Ben Clayton11653892023-09-19 19:15:59 +0000137} // namespace tint::wgsl