blob: a8e92b2ed50d1caf4e70d321b6b822ff0c0aeae8 [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},
dan sinclair5e6e6092024-08-19 20:00:01 +000064 {"chromium_experimental_subgroup_matrix", Extension::kChromiumExperimentalSubgroupMatrix},
James Price3b97fc42023-08-01 08:08:34 +000065 {"chromium_experimental_subgroups", Extension::kChromiumExperimentalSubgroups},
Ben Claytone4d210d2024-02-26 17:08:02 +000066 {"chromium_internal_graphite", Extension::kChromiumInternalGraphite},
Le Hoang Quyenf9a99182024-05-22 21:02:35 +000067 {"chromium_internal_input_attachments", Extension::kChromiumInternalInputAttachments},
James Price0b3400c2023-02-27 18:39:20 +000068 {"chromium_internal_relaxed_uniform_layout", Extension::kChromiumInternalRelaxedUniformLayout},
Jiawei Shao2918c422024-08-15 00:55:19 +000069 {"clip_distances", Extension::kClipDistances},
Jiawei Shaocc43f152024-05-29 00:44:43 +000070 {"dual_source_blending", Extension::kDualSourceBlending},
Ben Claytondb368f12022-10-11 18:26:18 +000071 {"f16", Extension::kF16},
James Price32950eb2024-06-26 11:25:37 +000072 {"subgroups", Extension::kSubgroups},
73 {"subgroups_f16", Extension::kSubgroupsF16},
Ben Claytonf50d56a2022-07-27 18:32:19 +000074};
75
76static constexpr Case kInvalidCases[] = {
Ben Claytond2e0db32022-10-12 18:49:15 +000077 {"chromium_disableuniformiccy_analysis", Extension::kUndefined},
78 {"chromil3_disable_unifority_analss", Extension::kUndefined},
79 {"chromium_disable_Vniformity_analysis", Extension::kUndefined},
Jiawei Shao53c0fa92023-12-08 01:24:00 +000080 {"chromium_experimental_framebuf1er_fetch", Extension::kUndefined},
81 {"chromium_experiqqntal_framebuffer_fetch", Extension::kUndefined},
82 {"chromium_experimental_framebuffll77_fetch", Extension::kUndefined},
Ben Claytonf4686672024-01-17 11:06:59 +000083 {"chroqqppum_expermental_pixel_HHocal", Extension::kUndefined},
84 {"chromium_experimenta_piel_occl", Extension::kUndefined},
85 {"chromium_exeGimental_pixel_local", Extension::kUndefined},
86 {"chvomium_experimental_push_constiint", Extension::kUndefined},
87 {"chromiu8WWexperimental_push_constant", Extension::kUndefined},
88 {"chromium_experiMental_push_costanxx", Extension::kUndefined},
dan sinclair5e6e6092024-08-19 20:00:01 +000089 {"cXromium_experimeggtal_subgrup_matrix", Extension::kUndefined},
90 {"chrXmiuu_expeimVtal_subgroup_matrix", Extension::kUndefined},
91 {"chromium_e3perimental_subgroup_matrix", Extension::kUndefined},
92 {"cEromium_experimental_subgroups", Extension::kUndefined},
93 {"TThromium_experiPPental_sugroups", Extension::kUndefined},
94 {"chddomium_experimental_subgroxxs", Extension::kUndefined},
95 {"chromi44m_internal_graphite", Extension::kUndefined},
96 {"chromSSuVV_internal_graphite", Extension::kUndefined},
97 {"cRromium_nternR22_graphite", Extension::kUndefined},
98 {"chromium_int9rnaF_inpu_attachments", Extension::kUndefined},
99 {"chrmium_internal_input_attachments", Extension::kUndefined},
100 {"cOOromium_internVlHinput_ttachRRents", Extension::kUndefined},
101 {"chromium_internl_relaxyd_uniform_layout", Extension::kUndefined},
102 {"chromnnum_internrr77_Gelaxell_uniform_layout", Extension::kUndefined},
103 {"chromium_intern4l_relaxe00_uniform_layout", Extension::kUndefined},
104 {"cli_iootanes", Extension::kUndefined},
105 {"czip_dstances", Extension::kUndefined},
106 {"lipp_distan11es", Extension::kUndefined},
107 {"XXual_source_blending", Extension::kUndefined},
108 {"dual_sou5IIcennblend99ng", Extension::kUndefined},
109 {"aSSual_soYrce_blerrdinHH", Extension::kUndefined},
110 {"U", Extension::kUndefined},
111 {"jV3", Extension::kUndefined},
112 {"", Extension::kUndefined},
113 {"uGGSrops", Extension::kUndefined},
114 {"subgous", Extension::kUndefined},
115 {"bgrups", Extension::kUndefined},
116 {"subgrokp_jj6", Extension::kUndefined},
117 {"ubgroupsffr6", Extension::kUndefined},
118 {"subgroujs_f16", Extension::kUndefined},
Ben Claytonf50d56a2022-07-27 18:32:19 +0000119};
120
121using ExtensionParseTest = testing::TestWithParam<Case>;
122
123TEST_P(ExtensionParseTest, Parse) {
124 const char* string = GetParam().string;
125 Extension expect = GetParam().value;
126 EXPECT_EQ(expect, ParseExtension(string));
Ben Clayton7f2b8cd2022-05-18 22:41:48 +0000127}
128
Ben Claytonf50d56a2022-07-27 18:32:19 +0000129INSTANTIATE_TEST_SUITE_P(ValidCases, ExtensionParseTest, testing::ValuesIn(kValidCases));
130INSTANTIATE_TEST_SUITE_P(InvalidCases, ExtensionParseTest, testing::ValuesIn(kInvalidCases));
131
132using ExtensionPrintTest = testing::TestWithParam<Case>;
133
134TEST_P(ExtensionPrintTest, Print) {
135 Extension value = GetParam().value;
136 const char* expect = GetParam().string;
Ben Clayton3c54ba52023-11-28 21:36:08 +0000137 EXPECT_EQ(expect, ToString(value));
Ben Claytonf50d56a2022-07-27 18:32:19 +0000138}
139
140INSTANTIATE_TEST_SUITE_P(ValidCases, ExtensionPrintTest, testing::ValuesIn(kValidCases));
141
142} // namespace parse_print_tests
143
Ben Clayton7f2b8cd2022-05-18 22:41:48 +0000144} // namespace
Ben Clayton11653892023-09-19 19:15:59 +0000145} // namespace tint::wgsl