sim: spirv: remove apply_stimulus
test-only function
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
use std::borrow::Cow;
|
||||
|
||||
use serde::{Deserialize, Serialize};
|
||||
use log::{info, trace, warn};
|
||||
use log::{info, warn};
|
||||
|
||||
use crate::diagnostics::SyncDiagnostics;
|
||||
use crate::geom::Index;
|
||||
@@ -67,8 +67,8 @@ impl<R: Clone, M: Clone, B: Default> Clone for SpirvSim<R, M, B> {
|
||||
mat: self.mat.clone(),
|
||||
step_no: self.step_no.clone(),
|
||||
// backends can be expensive to clone.
|
||||
// we require that the caller explicitly init the backend if they need this.
|
||||
// TODO: this probably shouldn't be a `Clone` method, but like "read_only_clone()".
|
||||
// instead we default-init them and they're expected to acquire their resources on
|
||||
// first query.
|
||||
backend: Default::default(),
|
||||
diag: self.diag.clone(),
|
||||
}
|
||||
@@ -197,18 +197,6 @@ where
|
||||
M: Send + Sync + Material<R> + Clone + Into<FullyGenericMaterial<R>>,
|
||||
B: Send + Sync + SimBackend<R, M>,
|
||||
{
|
||||
// TODO: remove this test-only backdoor
|
||||
#[allow(unused)] // used for test
|
||||
fn apply_stimulus(&mut self, stim: &dyn Stimulus<R>) {
|
||||
trace!("apply_stimulus begin");
|
||||
iterate_stim(stim, self.size(), self.feature_size(), self.time(), self.meta().time_step().cast(), |pos_idx, value_e, value_h| {
|
||||
let flat_idx = self.flat_index(pos_idx).unwrap();
|
||||
self.e[flat_idx] += value_e.cast();
|
||||
self.h[flat_idx] += value_h.cast();
|
||||
});
|
||||
trace!("apply_stimulus end");
|
||||
}
|
||||
|
||||
fn eval_stimulus<'a, S: Stimulus<R>>(&self, stim: &'a S)
|
||||
-> Cow<'a, RenderedStimulus<R>>
|
||||
{
|
||||
@@ -226,27 +214,6 @@ where
|
||||
}
|
||||
}
|
||||
|
||||
// used for test
|
||||
fn iterate_stim<R, S, F>(
|
||||
stim: &S, dim: Index, feature_size: f32, t_sec: f32, timestep: R, mut f: F
|
||||
)
|
||||
where
|
||||
R: Real,
|
||||
S: Stimulus<R> + ?Sized,
|
||||
F: FnMut(Index, Vec3<R>, Vec3<R>),
|
||||
{
|
||||
// TODO: parallelize
|
||||
for z in 0..dim.z() {
|
||||
for y in 0..dim.y() {
|
||||
for x in 0..dim.x() {
|
||||
let pos_idx = Index::new(x, y, z);
|
||||
let densities = stim.at(t_sec.cast(), feature_size.cast(), pos_idx);
|
||||
let (value_e, value_h) = (densities.e() * timestep, densities.h() * timestep);
|
||||
f(pos_idx, value_e, value_h)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod test {
|
||||
@@ -559,10 +526,10 @@ mod test {
|
||||
}
|
||||
}
|
||||
|
||||
dut_state.apply_stimulus(&RngStimulus::new(seed));
|
||||
let stim = RngStimulus::new(seed);
|
||||
for step in 0..steps {
|
||||
println!("step {}", step);
|
||||
dut_state.step();
|
||||
dut_state.step_multiple(1, &stim);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -585,33 +552,33 @@ mod test {
|
||||
mod same {
|
||||
use super::*;
|
||||
use crate::stim::{NoopStimulus, RngStimulus};
|
||||
fn test_same_explicit(
|
||||
fn test_same_explicit<S: Stimulus<R32>>(
|
||||
mut cpu_state: SpirvSim<R32, FullyGenericMaterial<R32>, CpuBackend>,
|
||||
mut wgpu_state: SpirvSim<R32, FullyGenericMaterial<R32>, WgpuBackend>,
|
||||
stim: &S,
|
||||
step_iters: u64,
|
||||
steps_per_iter: u32
|
||||
) {
|
||||
for _ in 0..step_iters {
|
||||
cpu_state.step_multiple(steps_per_iter, &NoopStimulus);
|
||||
wgpu_state.step_multiple(steps_per_iter, &NoopStimulus);
|
||||
cpu_state.step_multiple(steps_per_iter, stim);
|
||||
wgpu_state.step_multiple(steps_per_iter, stim);
|
||||
assert_simstate_eq(&wgpu_state, &cpu_state);
|
||||
}
|
||||
}
|
||||
fn test_same(seed: u64, step_iters: u64, steps_per_iter: u32, size: Index) {
|
||||
let mut cpu_state = SpirvSim::new_with_backend(size, 1e-3, CpuBackend::default());
|
||||
cpu_state.apply_stimulus(&RngStimulus::new(seed));
|
||||
let cpu_state = SpirvSim::new_with_backend(size, 1e-3, CpuBackend::default());
|
||||
|
||||
let mut wgpu_state = SpirvSim::new_with_backend(size, 1e-3, WgpuBackend::default());
|
||||
wgpu_state.apply_stimulus(&RngStimulus::new(seed));
|
||||
let wgpu_state = SpirvSim::new_with_backend(size, 1e-3, WgpuBackend::default());
|
||||
let stim = RngStimulus::new(seed);
|
||||
|
||||
test_same_explicit(cpu_state, wgpu_state, step_iters, steps_per_iter);
|
||||
test_same_explicit(cpu_state, wgpu_state, &stim, step_iters, steps_per_iter);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn same_no_step_no_stim() {
|
||||
let cpu_state = SpirvSim::new_with_backend(Index::new(8, 8, 8), 1e-3, CpuBackend::default());
|
||||
let wgpu_state = SpirvSim::new_with_backend(Index::new(8, 8, 8), 1e-3, WgpuBackend::default());
|
||||
test_same_explicit(cpu_state, wgpu_state, 1, 1);
|
||||
test_same_explicit(cpu_state, wgpu_state, &NoopStimulus, 1, 1);
|
||||
}
|
||||
|
||||
#[test]
|
||||
@@ -661,11 +628,9 @@ mod test {
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: we should apply this on every frame?
|
||||
cpu_state.apply_stimulus(&RngStimulus::new(seed));
|
||||
wgpu_state.apply_stimulus(&RngStimulus::new(seed));
|
||||
let stim = RngStimulus::new(seed);
|
||||
|
||||
test_same_explicit(cpu_state, wgpu_state, step_iters, steps_per_iter);
|
||||
test_same_explicit(cpu_state, wgpu_state, &stim, step_iters, steps_per_iter);
|
||||
}
|
||||
|
||||
#[test]
|
||||
@@ -708,10 +673,9 @@ mod test {
|
||||
}
|
||||
}
|
||||
|
||||
cpu_state.apply_stimulus(&RngStimulus::new(seed));
|
||||
wgpu_state.apply_stimulus(&RngStimulus::new(seed));
|
||||
let stim = RngStimulus::new(seed);
|
||||
|
||||
test_same_explicit(cpu_state, wgpu_state, step_iters, steps_per_iter);
|
||||
test_same_explicit(cpu_state, wgpu_state, &stim, step_iters, steps_per_iter);
|
||||
}
|
||||
|
||||
#[test]
|
||||
@@ -736,10 +700,9 @@ mod test {
|
||||
ref_state.put_material(Index::new(1, 1, 1), mat.clone());
|
||||
dut_state.put_material(Index::new(1, 1, 1), mat.clone());
|
||||
|
||||
ref_state.apply_stimulus(&RngStimulus::new(seed));
|
||||
dut_state.apply_stimulus(&RngStimulus::new(seed));
|
||||
let stim = RngStimulus::new(seed);
|
||||
|
||||
test_same_explicit(ref_state, dut_state, steps, 1);
|
||||
test_same_explicit(ref_state, dut_state, &stim, steps, 1);
|
||||
}
|
||||
|
||||
#[test]
|
||||
@@ -753,10 +716,9 @@ mod test {
|
||||
ref_state.put_material(Index::new(1, 1, 0), mat.clone());
|
||||
dut_state.put_material(Index::new(1, 1, 0), mat.clone());
|
||||
|
||||
ref_state.apply_stimulus(&RngStimulus::new(seed));
|
||||
dut_state.apply_stimulus(&RngStimulus::new(seed));
|
||||
let stim = RngStimulus::new(seed);
|
||||
|
||||
test_same_explicit(ref_state, dut_state, steps, 1);
|
||||
test_same_explicit(ref_state, dut_state, &stim, steps, 1);
|
||||
}
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user