Skip to content

Commit 23406ca

Browse files
test(naga): cover diagnostic(…); parsing
1 parent 1df7809 commit 23406ca

File tree

2 files changed

+84
-0
lines changed

2 files changed

+84
-0
lines changed

naga/src/diagnostic_filter.rs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ use serde::Serialize;
1919
#[cfg_attr(feature = "serialize", derive(Serialize))]
2020
#[cfg_attr(feature = "deserialize", derive(Deserialize))]
2121
#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
22+
#[cfg_attr(test, derive(strum::EnumIter))]
2223
pub enum Severity {
2324
Off,
2425
Info,
@@ -27,6 +28,17 @@ pub enum Severity {
2728
}
2829

2930
impl Severity {
31+
/// Maps this [`Severity`] into the sentinel word associated with it in WGSL.
32+
#[cfg(test)]
33+
pub const fn to_ident(self) -> &'static str {
34+
match self {
35+
Self::Error => Self::ERROR,
36+
Self::Warning => Self::WARNING,
37+
Self::Info => Self::INFO,
38+
Self::Off => Self::OFF,
39+
}
40+
}
41+
3042
/// Checks whether this severity is [`Self::Error`].
3143
///
3244
/// Naga does not yet support diagnostic items at lesser severities than
@@ -58,6 +70,7 @@ impl Severity {
5870
#[cfg_attr(feature = "serialize", derive(Serialize))]
5971
#[cfg_attr(feature = "deserialize", derive(Deserialize))]
6072
#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
73+
#[cfg_attr(test, derive(strum::EnumIter))]
6174
pub enum FilterableTriggeringRule {
6275
DerivativeUniformity,
6376
}

naga/src/front/wgsl/diagnostic_filter.rs

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,3 +42,74 @@ impl FilterableTriggeringRule {
4242
}
4343
}
4444
}
45+
46+
#[cfg(test)]
47+
mod test {
48+
use crate::diagnostic_filter::{FilterableTriggeringRule, Severity};
49+
use crate::front::wgsl::assert_parse_err;
50+
51+
use itertools::Itertools as _;
52+
use strum::IntoEnumIterator as _;
53+
54+
#[test]
55+
fn basic() {}
56+
57+
#[test]
58+
fn malformed() {
59+
assert_parse_err("directive;", snapshot);
60+
assert_parse_err("directive(off, asdf;", snapshot);
61+
assert_parse_err("directive();", snapshot);
62+
}
63+
64+
#[test]
65+
fn severities() {}
66+
67+
#[test]
68+
fn invalid_severity() {}
69+
70+
#[test]
71+
fn triggering_rules() {}
72+
73+
#[test]
74+
fn invalid_triggering_rule() {
75+
#[derive(Debug, Clone)]
76+
enum Rule {
77+
Valid(FilterableTriggeringRule),
78+
Invalid,
79+
}
80+
81+
#[derive(Debug, Clone)]
82+
enum Sev {
83+
Valid(Severity),
84+
Invalid,
85+
}
86+
87+
let cases = {
88+
let invalid_sev_cases = FilterableTriggeringRule::iter()
89+
.map(Rule::Valid)
90+
.cartesian_product([Sev::Invalid]);
91+
let invalid_rule_cases = [Rule::Invalid]
92+
.into_iter()
93+
.cartesian_product(Severity::iter().map(Sev::Valid));
94+
invalid_sev_cases.chain(invalid_rule_cases)
95+
};
96+
97+
for (rule, severity) in cases {
98+
let rule = match rule {
99+
Rule::Valid(rule) => rule.to_wgsl_ident(),
100+
Rule::Invalid => "totes_invalid_rule",
101+
};
102+
let severity = match severity {
103+
Sev::Valid(severity) => severity.to_ident(),
104+
Sev::Invalid => "totes_invalid_severity",
105+
};
106+
let shader = format!("diagnostic({severity},{rule});");
107+
let expected_msg = format!(
108+
"\
109+
"
110+
);
111+
112+
assert_parse_err(&shader, &expected_msg);
113+
}
114+
}
115+
}

0 commit comments

Comments
 (0)