Skip to content
Snippets Groups Projects
Commit e414be05 authored by Udo Eisenbarth's avatar Udo Eisenbarth :speech_balloon:
Browse files

Merge branch '82-spectrometer-add-analysis-unit-test' into 'main'

Resolve "Spectrometer: Add analysis unit test"

Closes #82

See merge request !29
parents 3e95df99 084ce309
No related branches found
No related tags found
1 merge request!29Resolve "Spectrometer: Add analysis unit test"
Pipeline #7778 passed
...@@ -53,9 +53,11 @@ fn create_default_props() -> Properties { ...@@ -53,9 +53,11 @@ fn create_default_props() -> Properties {
"spectrometer type", "spectrometer type",
SpectrometerType::IdealSpectrometer.into(), SpectrometerType::IdealSpectrometer.into(),
); );
props.set("inverted", false.into());
props props
} }
impl Default for Spectrometer { impl Default for Spectrometer {
/// create an ideal spectrometer.
fn default() -> Self { fn default() -> Self {
Self { Self {
light_data: None, light_data: None,
...@@ -65,9 +67,10 @@ impl Default for Spectrometer { ...@@ -65,9 +67,10 @@ impl Default for Spectrometer {
} }
impl Spectrometer { impl Spectrometer {
/// Creates a new [`Spectrometer`] of the given [`SpectrometerType`]. /// Creates a new [`Spectrometer`] of the given [`SpectrometerType`].
pub fn new(spectrometer_type: SpectrometerType) -> Self { pub fn new(name: &str, spectrometer_type: SpectrometerType) -> Self {
let mut props = create_default_props(); let mut props = create_default_props();
props.set("spectrometer type", spectrometer_type.into()); props.set("spectrometer type", spectrometer_type.into());
props.set("name", name.into());
Spectrometer { Spectrometer {
props, props,
..Default::default() ..Default::default()
...@@ -98,6 +101,9 @@ impl Optical for Spectrometer { ...@@ -98,6 +101,9 @@ impl Optical for Spectrometer {
fn node_type(&self) -> &str { fn node_type(&self) -> &str {
"spectrometer" "spectrometer"
} }
fn inverted(&self) -> bool {
self.properties().get_bool("inverted").unwrap().unwrap()
}
fn ports(&self) -> OpticPorts { fn ports(&self) -> OpticPorts {
let mut ports = OpticPorts::new(); let mut ports = OpticPorts::new();
ports.add_input("in1").unwrap(); ports.add_input("in1").unwrap();
...@@ -197,13 +203,14 @@ mod test { ...@@ -197,13 +203,14 @@ mod test {
} }
#[test] #[test]
fn new() { fn new() {
let meter = Spectrometer::new(SpectrometerType::HR2000); let meter = Spectrometer::new("test", SpectrometerType::HR2000);
assert_eq!(meter.name(), "test");
assert!(meter.light_data.is_none()); assert!(meter.light_data.is_none());
assert_eq!(meter.spectrometer_type(), SpectrometerType::HR2000); assert_eq!(meter.spectrometer_type(), SpectrometerType::HR2000);
} }
#[test] #[test]
fn set_meter_type() { fn set_meter_type() {
let mut meter = Spectrometer::new(SpectrometerType::IdealSpectrometer); let mut meter = Spectrometer::new("test", SpectrometerType::IdealSpectrometer);
meter.set_spectrometer_type(SpectrometerType::HR2000); meter.set_spectrometer_type(SpectrometerType::HR2000);
assert_eq!(meter.spectrometer_type(), SpectrometerType::HR2000); assert_eq!(meter.spectrometer_type(), SpectrometerType::HR2000);
} }
...@@ -214,16 +221,61 @@ mod test { ...@@ -214,16 +221,61 @@ mod test {
assert_eq!(meter.ports().outputs(), vec!["out1"]); assert_eq!(meter.ports().outputs(), vec!["out1"]);
} }
#[test] #[test]
fn analyze() { fn inverted() {
let mut meter = Spectrometer::default(); let mut node = Spectrometer::default();
node.set_property("inverted", true.into()).unwrap();
assert_eq!(node.inverted(), true)
}
#[test]
fn analyze_ok() {
let mut node = Spectrometer::default();
let mut input = LightResult::default(); let mut input = LightResult::default();
input.insert( let input_light = LightData::Energy(DataEnergy {
"in1".into(), spectrum: create_he_ne_spectrum(1.0),
Some(LightData::Energy(DataEnergy { });
spectrum: create_he_ne_spectrum(1.0), input.insert("in1".into(), Some(input_light.clone()));
})), let output = node.analyze(input, &AnalyzerType::Energy);
); assert!(output.is_ok());
let result = meter.analyze(input, &AnalyzerType::Energy); let output = output.unwrap();
assert!(result.is_ok()); assert!(output.contains_key("out1".into()));
assert_eq!(output.len(), 1);
let output = output.get("out1".into()).unwrap();
assert!(output.is_some());
let output = output.clone().unwrap();
assert_eq!(output, input_light);
}
#[test]
fn analyze_wrong() {
let mut node =Spectrometer::default();
let mut input = LightResult::default();
let input_light = LightData::Energy(DataEnergy {
spectrum: create_he_ne_spectrum(1.0),
});
input.insert("wrong".into(), Some(input_light.clone()));
let output = node.analyze(input, &AnalyzerType::Energy);
assert!(output.is_ok());
let output = output.unwrap();
let output = output.get("out1".into()).unwrap();
assert!(output.is_none());
}
#[test]
fn analyze_inverse() {
let mut node = Spectrometer::default();
node.set_property("inverted", true.into()).unwrap();
let mut input = LightResult::default();
let input_light = LightData::Energy(DataEnergy {
spectrum: create_he_ne_spectrum(1.0),
});
input.insert("out1".into(), Some(input_light.clone()));
let output = node.analyze(input, &AnalyzerType::Energy);
assert!(output.is_ok());
let output = output.unwrap();
assert!(output.contains_key("in1".into()));
assert_eq!(output.len(), 1);
let output = output.get("in1".into()).unwrap();
assert!(output.is_some());
let output = output.clone().unwrap();
assert_eq!(output, input_light);
} }
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment