#![allow(dead_code)]
use serde::{Deserialize, Serialize};
pub mod wire;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub struct BlockPos {
pub num: u32,
pub id: [u8; 32],
}
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub struct Range {
pub begin: u32,
pub end: u32,
}
impl Range {
pub const fn is_empty(&self) -> bool {
self.end <= self.begin
}
pub const fn contains(&self, n: u32) -> bool {
self.begin <= n && n < self.end
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn range_is_half_open() {
let r = Range { begin: 2, end: 5 };
assert!(!r.is_empty());
assert!(!r.contains(1));
assert!(r.contains(2));
assert!(r.contains(4));
assert!(!r.contains(5));
}
#[test]
fn range_is_empty_when_end_not_above_begin() {
assert!(Range::default().is_empty());
assert!(Range { begin: 7, end: 7 }.is_empty());
assert!(Range { begin: 9, end: 3 }.is_empty());
assert!(!Range { begin: 9, end: 3 }.contains(5));
}
#[test]
fn range_serde_uses_begin_end_keys() {
let r = Range {
begin: 2,
end: 50_000_001,
};
let json = serde_json::to_value(r).unwrap();
assert_eq!(json, serde_json::json!({ "begin": 2, "end": 50_000_001 }));
let back: Range = serde_json::from_value(json).unwrap();
assert_eq!(back, r);
}
}