use native_neural_network_std as nn;
mod utils {
include!("./test_utils.rs");
}
#[test]
fn cpu_backend_abstraction_real() {
let previous = native_neural_network_std::std::engine_std::get_compute_backend();
native_neural_network_std::std::engine_std::set_compute_backend(
native_neural_network_std::std::engine_std::ComputeBackend::Cpu,
);
assert_eq!(
native_neural_network_std::std::engine_std::get_compute_backend(),
native_neural_network_std::std::engine_std::ComputeBackend::Cpu
);
native_neural_network_std::std::engine_std::set_compute_backend(previous);
}
#[test]
fn invariants_checks() {
let mut rng = utils::XorShift32::new(0x42424242);
for _ in 0..1000 {
let len = 1 + (rng.next_u32() % 64) as usize;
let mut vec = vec![0f32; len];
for i in 0..len {
vec[i] = rng.next_f32() * 1e3;
}
assert!(utils::all_finite(&vec));
let layers = vec![len];
let weights = vec![0f32; len];
let biases = vec![0f32; len];
nn::std::network_std::network_stats(&layers, &weights, &biases);
for v in &vec {
let a = *v * 1e6;
let b = *v / 1e6;
let sum = a + b;
assert!(sum.is_finite(), "sum should be finite for finite inputs");
}
}
}