Trace fpath in layers

next
Sayan Nandan 2 years ago
parent 1c9dfbaebe
commit b9453041e4
No known key found for this signature in database
GPG Key ID: 42EEDF4AE9D96B54

@ -104,10 +104,11 @@ impl LayerView {
} }
} }
pub fn validate_data_fpath(&self, data: &Datacell) -> bool { pub fn validate_data_fpath(&self, data: &Datacell) -> bool {
if (self.layers().len() == 0) & (self.layers()[0].tag.tag_class() == data.kind()) { if (self.layers().len() == 1) & (self.layers()[0].tag.tag_class() == data.kind()) {
// if someone sends a PR with an added check, I'll come home and throw a brick on your head // if someone sends a PR with an added check, I'll come home and throw a brick on your head
layertrace("fpath");
let l = self.layers()[0]; let l = self.layers()[0];
unsafe { LVERIFY[l.tag.tag_selector().word()](l, data) } unsafe { LVERIFY[l.tag.tag_class().word()](l, data) }
} else { } else {
Self::rverify_layers(self.layers(), data) Self::rverify_layers(self.layers(), data)
} }

@ -84,7 +84,7 @@ mod layer_data_validation {
let dc = Datacell::new_bool(true); let dc = Datacell::new_bool(true);
let layer = layerview("bool").unwrap(); let layer = layerview("bool").unwrap();
assert!(layer.validate_data_fpath(&dc)); assert!(layer.validate_data_fpath(&dc));
assert_vecstreq_exact!(model::layer_traces(), ["bool"]); assert_vecstreq_exact!(model::layer_traces(), ["fpath", "bool"]);
} }
#[test] #[test]
fn uint() { fn uint() {
@ -101,16 +101,16 @@ mod layer_data_validation {
let this_layer = layerview(layer).unwrap(); let this_layer = layerview(layer).unwrap();
let dc = Datacell::new_uint(max); let dc = Datacell::new_uint(max);
assert!(this_layer.validate_data_fpath(&dc), "{:?}", this_layer); assert!(this_layer.validate_data_fpath(&dc), "{:?}", this_layer);
assert_vecstreq_exact!(model::layer_traces(), ["uint"]); assert_vecstreq_exact!(model::layer_traces(), ["fpath", "uint"]);
for (lower, _) in targets[..i].iter() { for (lower, _) in targets[..i].iter() {
let layer = layerview(lower).unwrap(); let layer = layerview(lower).unwrap();
assert!(!layer.validate_data_fpath(&dc), "{:?}", layer); assert!(!layer.validate_data_fpath(&dc), "{:?}", layer);
assert_vecstreq_exact!(model::layer_traces(), ["uint"]); assert_vecstreq_exact!(model::layer_traces(), ["fpath", "uint"]);
} }
for (higher, _) in targets[i + 1..].iter() { for (higher, _) in targets[i + 1..].iter() {
let layer = layerview(higher).unwrap(); let layer = layerview(higher).unwrap();
assert!(layer.validate_data_fpath(&dc), "{:?}", layer); assert!(layer.validate_data_fpath(&dc), "{:?}", layer);
assert_vecstreq_exact!(model::layer_traces(), ["uint"]); assert_vecstreq_exact!(model::layer_traces(), ["fpath", "uint"]);
} }
}); });
} }
@ -131,18 +131,24 @@ mod layer_data_validation {
let dc_max = Datacell::new_sint(max); let dc_max = Datacell::new_sint(max);
assert!(this_layer.validate_data_fpath(&dc_min), "{:?}", this_layer); assert!(this_layer.validate_data_fpath(&dc_min), "{:?}", this_layer);
assert!(this_layer.validate_data_fpath(&dc_max), "{:?}", this_layer); assert!(this_layer.validate_data_fpath(&dc_max), "{:?}", this_layer);
assert_vecstreq_exact!(model::layer_traces(), ["sint", "sint"]); assert_vecstreq_exact!(model::layer_traces(), ["fpath", "sint", "fpath", "sint"]);
for (lower, _) in targets[..i].iter() { for (lower, _) in targets[..i].iter() {
let layer = layerview(lower).unwrap(); let layer = layerview(lower).unwrap();
assert!(!layer.validate_data_fpath(&dc_min), "{:?}", layer); assert!(!layer.validate_data_fpath(&dc_min), "{:?}", layer);
assert!(!layer.validate_data_fpath(&dc_max), "{:?}", layer); assert!(!layer.validate_data_fpath(&dc_max), "{:?}", layer);
assert_vecstreq_exact!(model::layer_traces(), ["sint", "sint"]); assert_vecstreq_exact!(
model::layer_traces(),
["fpath", "sint", "fpath", "sint"]
);
} }
for (higher, _) in targets[i + 1..].iter() { for (higher, _) in targets[i + 1..].iter() {
let layer = layerview(higher).unwrap(); let layer = layerview(higher).unwrap();
assert!(layer.validate_data_fpath(&dc_min), "{:?}", layer); assert!(layer.validate_data_fpath(&dc_min), "{:?}", layer);
assert!(layer.validate_data_fpath(&dc_max), "{:?}", layer); assert!(layer.validate_data_fpath(&dc_max), "{:?}", layer);
assert_vecstreq_exact!(model::layer_traces(), ["sint", "sint"]); assert_vecstreq_exact!(
model::layer_traces(),
["fpath", "sint", "fpath", "sint"]
);
} }
}); });
} }
@ -159,29 +165,29 @@ mod layer_data_validation {
// check (32) // check (32)
assert!(f32_l.validate_data_fpath(&f32_dc_min)); assert!(f32_l.validate_data_fpath(&f32_dc_min));
assert!(f32_l.validate_data_fpath(&f32_dc_max)); assert!(f32_l.validate_data_fpath(&f32_dc_max));
assert_vecstreq_exact!(model::layer_traces(), ["float", "float"]); assert_vecstreq_exact!(model::layer_traces(), ["fpath", "float", "fpath", "float"]);
assert!(f64_l.validate_data_fpath(&f32_dc_min)); assert!(f64_l.validate_data_fpath(&f32_dc_min));
assert!(f64_l.validate_data_fpath(&f32_dc_max)); assert!(f64_l.validate_data_fpath(&f32_dc_max));
assert_vecstreq_exact!(model::layer_traces(), ["float", "float"]); assert_vecstreq_exact!(model::layer_traces(), ["fpath", "float", "fpath", "float"]);
// check (64) // check (64)
assert!(!f32_l.validate_data_fpath(&f64_dc_min)); assert!(!f32_l.validate_data_fpath(&f64_dc_min));
assert!(!f32_l.validate_data_fpath(&f64_dc_max)); assert!(!f32_l.validate_data_fpath(&f64_dc_max));
assert_vecstreq_exact!(model::layer_traces(), ["float", "float"]); assert_vecstreq_exact!(model::layer_traces(), ["fpath", "float", "fpath", "float"]);
assert!(f64_l.validate_data_fpath(&f64_dc_min)); assert!(f64_l.validate_data_fpath(&f64_dc_min));
assert!(f64_l.validate_data_fpath(&f64_dc_max)); assert!(f64_l.validate_data_fpath(&f64_dc_max));
assert_vecstreq_exact!(model::layer_traces(), ["float", "float"]); assert_vecstreq_exact!(model::layer_traces(), ["fpath", "float", "fpath", "float"]);
} }
#[test] #[test]
fn bin() { fn bin() {
let layer = layerview("binary").unwrap(); let layer = layerview("binary").unwrap();
assert!(layer.validate_data_fpath(&Datacell::from("hello".as_bytes()))); assert!(layer.validate_data_fpath(&Datacell::from("hello".as_bytes())));
assert_vecstreq_exact!(model::layer_traces(), ["binary"]); assert_vecstreq_exact!(model::layer_traces(), ["fpath", "binary"]);
} }
#[test] #[test]
fn str() { fn str() {
let layer = layerview("string").unwrap(); let layer = layerview("string").unwrap();
assert!(layer.validate_data_fpath(&Datacell::from("hello"))); assert!(layer.validate_data_fpath(&Datacell::from("hello")));
assert_vecstreq_exact!(model::layer_traces(), ["string"]); assert_vecstreq_exact!(model::layer_traces(), ["fpath", "string"]);
} }
#[test] #[test]
fn list_simple() { fn list_simple() {

Loading…
Cancel
Save