use native_neural_network_std::std::activations_std::ActivationKind;
use native_neural_network_std::std::layers_std::{
fill_std_slice_from_native, to_native_vec, DenseLayerDesc, LayerSpec,
};
#[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 multiple_layers_to_native_and_back() {
let layers = vec![
LayerSpec::Dense(DenseLayerDesc {
input_size: 3,
output_size: 2,
weight_offset: 0,
bias_offset: 0,
activation: ActivationKind::Relu,
}),
LayerSpec::Dense(DenseLayerDesc {
input_size: 2,
output_size: 1,
weight_offset: 0,
bias_offset: 0,
activation: ActivationKind::Identity,
}),
];
let native = to_native_vec(&layers);
let mut out = vec![
LayerSpec::Dense(DenseLayerDesc {
input_size: 0,
output_size: 0,
weight_offset: 0,
bias_offset: 0,
activation: ActivationKind::Identity
});
layers.len()
];
fill_std_slice_from_native(&native[..], &mut out);
assert_eq!(out.len(), layers.len());
assert_eq!(out[0].input_size(), 3);
assert_eq!(out[1].output_size(), 1);
}
#[test]
fn layer_and_model_metadata() {
let layer = LayerSpec::Dense(DenseLayerDesc {
input_size: 4,
output_size: 2,
weight_offset: 5,
bias_offset: 3,
activation: ActivationKind::Relu,
});
assert_eq!(layer.input_size(), 4);
assert_eq!(layer.output_size(), 2);
let native = to_native_vec(&[layer]);
let mut out = vec![
LayerSpec::Dense(DenseLayerDesc {
input_size: 0,
output_size: 0,
weight_offset: 0,
bias_offset: 0,
activation: ActivationKind::Identity
});
1
];
fill_std_slice_from_native(&native[..], &mut out);
assert_eq!(out[0].input_size(), 4);
}