oxedyne/fe2o3/fe2o3_jdat/tests/map.rs
3.4 KiB, 8 runs
created by r1870400018:503, which is this file's identity for as long as the history lasts, whatever it is later renamed to
download · who wrote it · its history
| 1 | use oxedyne_fe2o3_jdat::prelude::*; |
| 2 | |
| 3 | use oxedyne_fe2o3_core::{ |
| 4 | prelude::*, |
| 5 | test::test_it, |
| 6 | }; |
| 7 | |
| 8 | |
| 9 | pub fn test_map_func(filter: &'static str) -> Outcome<()> { |
| 10 | |
| 11 | res!(test_it(filter, &["Map Find 000", "all", "map", "find"], || { |
| 12 | let d = mapdat!{ |
| 13 | 1u8 => mapdat!{ |
| 14 | 2u8 => mapdat!{ |
| 15 | 4321u16 => mapdat!{ |
| 16 | "user" => 1234u128, |
| 17 | "time" => 5678u64, |
| 18 | "value" => 42u8, |
| 19 | }, |
| 20 | }, |
| 21 | } |
| 22 | }; |
| 23 | let found_opt = res!(d.find(&listdat![1u8, 2u8, 4321u16, "value"])); |
| 24 | match found_opt { |
| 25 | Some(found) => { |
| 26 | test!("Found it! {:?}", found); |
| 27 | req!(&dat!(42u8), found); |
| 28 | } |
| 29 | None => return Err(err!("Expected value."; Test, Missing, Data)), |
| 30 | } |
| 31 | Ok(()) |
| 32 | })); |
| 33 | |
| 34 | res!(test_it(filter, &["Map Find 010", "all", "map", "find"], || { |
| 35 | let d = omapdat!{ |
| 36 | 1u8 => omapdat!{ |
| 37 | 2u8 => omapdat!{ |
| 38 | 4321u16 => omapdat!{ |
| 39 | "user" => 1234u128, |
| 40 | "time" => 5678u64, |
| 41 | "value" => 42u8, |
| 42 | }, |
| 43 | }, |
| 44 | } |
| 45 | }; |
| 46 | let found_opt = res!(d.find(&listdat![1u8, 2u8, 4321u16, "value"])); |
| 47 | match found_opt { |
| 48 | Some(found) => { |
| 49 | test!("Found it! {:?}", found); |
| 50 | req!(&dat!(42u8), found); |
| 51 | } |
| 52 | None => return Err(err!("Expected value."; Test, Missing, Data)), |
| 53 | } |
| 54 | Ok(()) |
| 55 | })); |
| 56 | |
| 57 | res!(test_it(filter, &["Map Find 100", "all", "map", "find"], || { |
| 58 | let d = mapdat!{ |
| 59 | 1u8 => mapdat!{ |
| 60 | 4321u16 => mapdat!{ |
| 61 | "user" => 1234u128, |
| 62 | "time" => 5678u64, |
| 63 | "value" => 42u8, |
| 64 | }, |
| 65 | 5678u16 => mapdat!{ |
| 66 | "user" => 1234u128, |
| 67 | "time" => 5678u64, |
| 68 | "value" => 84u8, |
| 69 | } |
| 70 | }, |
| 71 | 2u8 => mapdat!{ |
| 72 | 9012u16 => mapdat!{ |
| 73 | "user" => 1234u128, |
| 74 | "time" => 5678u64, |
| 75 | "value" => 168u8, |
| 76 | } |
| 77 | } |
| 78 | }; |
| 79 | let found = res!(d.find_all(&dat!("value"))); |
| 80 | req!(3, found.len()); |
| 81 | test!("Found it! {:?}", found); |
| 82 | req!(&dat!(42u8), found[0]); |
| 83 | req!(&dat!(84u8), found[1]); |
| 84 | req!(&dat!(168u8), found[2]); |
| 85 | Ok(()) |
| 86 | })); |
| 87 | |
| 88 | res!(test_it(filter, &["Map Get I64 000", "all", "map", "get"], || { |
| 89 | // A u64 written through mapdat! must be readable back as i64, as the |
| 90 | // doc comment promises; it was not before the U64 getter arm existed. |
| 91 | let d = mapdat!{ |
| 92 | "size" => 1_048_576u64, |
| 93 | "count" => 42u32, |
| 94 | }; |
| 95 | req!(1_048_576i64, res!(d.map_get_i64(&dat!("size")))); |
| 96 | req!(42i64, res!(d.map_get_i64(&dat!("count")))); |
| 97 | |
| 98 | // Above i64::MAX the conversion must refuse, not wrap. |
| 99 | let big = mapdat!{ "size" => u64::MAX }; |
| 100 | match big.map_get_i64(&dat!("size")) { |
| 101 | Err(_) => (), |
| 102 | Ok(n) => return Err(err!( |
| 103 | "u64::MAX coerced to i64 as {}, expected a refusal.", n; |
| 104 | Test, Mismatch)), |
| 105 | } |
| 106 | Ok(()) |
| 107 | })); |
| 108 | |
| 109 | Ok(()) |
| 110 | } |