Skip to content

Commit

Permalink
moved spirv tests into front/spv/mod.rs
Browse files Browse the repository at this point in the history
  • Loading branch information
schell committed Sep 6, 2024
1 parent eade8e1 commit 5b1659d
Show file tree
Hide file tree
Showing 2 changed files with 80 additions and 79 deletions.
79 changes: 0 additions & 79 deletions naga/src/front/atomic_upgrade.rs
Original file line number Diff line number Diff line change
Expand Up @@ -212,82 +212,3 @@ impl Module {
Ok(())
}
}

#[cfg(test)]
mod test {
fn atomic_test(bytes: &[u8]) {
let _ = env_logger::builder().is_test(true).try_init();
let m = crate::front::spv::parse_u8_slice(bytes, &Default::default()).unwrap();

let mut wgsl = String::new();
let mut should_panic = false;

for vflags in [
crate::valid::ValidationFlags::all(),
crate::valid::ValidationFlags::empty(),
] {
let mut validator = crate::valid::Validator::new(vflags, Default::default());
match validator.validate(&m) {
Err(e) => {
log::error!("SPIR-V validation {}", e.emit_to_string(""));
should_panic = true;
}
Ok(i) => {
wgsl = crate::back::wgsl::write_string(
&m,
&i,
crate::back::wgsl::WriterFlags::empty(),
)
.unwrap();
log::info!("wgsl-out:\n{wgsl}");
break;
}
};
}

if should_panic {
panic!("validation error");
}

let m = match crate::front::wgsl::parse_str(&wgsl) {
Ok(m) => m,
Err(e) => {
log::error!("round trip WGSL validation {}", e.emit_to_string(&wgsl));
panic!("invalid module");
}
};
let mut validator =
crate::valid::Validator::new(crate::valid::ValidationFlags::all(), Default::default());
if let Err(e) = validator.validate(&m) {
log::error!("{}", e.emit_to_string(&wgsl));
panic!("invalid generated wgsl");
}
}

#[test]
fn atomic_i_inc() {
atomic_test(include_bytes!("../../tests/in/spv/atomic_i_increment.spv"));
}

#[test]
fn atomic_load_and_store() {
atomic_test(include_bytes!(
"../../tests/in/spv/atomic_load_and_store.spv"
));
}

#[test]
fn atomic_exchange() {
atomic_test(include_bytes!("../../tests/in/spv/atomic_exchange.spv"));
}

#[test]
fn atomic_i_decrement() {
atomic_test(include_bytes!("../../tests/in/spv/atomic_i_decrement.spv"));
}

#[test]
fn atomic_i_add_and_sub() {
atomic_test(include_bytes!("../../tests/in/spv/atomic_i_add_sub.spv"));
}
}
80 changes: 80 additions & 0 deletions naga/src/front/spv/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5963,4 +5963,84 @@ mod test {
];
let _ = super::parse_u8_slice(&bin, &Default::default()).unwrap();
}

fn atomic_test(bytes: &[u8]) {
let _ = env_logger::builder().is_test(true).try_init();
let m = crate::front::spv::parse_u8_slice(bytes, &Default::default()).unwrap();

let mut wgsl = String::new();
let mut should_panic = false;

for vflags in [
crate::valid::ValidationFlags::all(),
crate::valid::ValidationFlags::empty(),
] {
let mut validator = crate::valid::Validator::new(vflags, Default::default());
match validator.validate(&m) {
Err(e) => {
log::error!("SPIR-V validation {}", e.emit_to_string(""));
should_panic = true;
}
Ok(i) => {
wgsl = crate::back::wgsl::write_string(
&m,
&i,
crate::back::wgsl::WriterFlags::empty(),
)
.unwrap();
log::info!("wgsl-out:\n{wgsl}");
break;
}
};
}

if should_panic {
panic!("validation error");
}

let m = match crate::front::wgsl::parse_str(&wgsl) {
Ok(m) => m,
Err(e) => {
log::error!("round trip WGSL validation {}", e.emit_to_string(&wgsl));
panic!("invalid module");
}
};
let mut validator =
crate::valid::Validator::new(crate::valid::ValidationFlags::all(), Default::default());
if let Err(e) = validator.validate(&m) {
log::error!("{}", e.emit_to_string(&wgsl));
panic!("invalid generated wgsl");
}
}

#[test]
fn atomic_i_inc() {
atomic_test(include_bytes!(
"../../../tests/in/spv/atomic_i_increment.spv"
));
}

#[test]
fn atomic_load_and_store() {
atomic_test(include_bytes!(
"../../../tests/in/spv/atomic_load_and_store.spv"
));
}

#[test]
fn atomic_exchange() {
atomic_test(include_bytes!("../../../tests/in/spv/atomic_exchange.spv"));
}

#[test]
fn atomic_i_decrement() {
atomic_test(include_bytes!(
"../../../tests/in/spv/atomic_i_decrement.spv"
));
}

#[test]
fn atomic_i_add_and_sub() {
atomic_test(include_bytes!("../../../tests/in/spv/atomic_i_add_sub.spv"));
}
}

0 comments on commit 5b1659d

Please sign in to comment.