/* This file is part of jellything (https://codeberg.org/metamuffin/jellything) which is licensed under the GNU Affero General Public License (version 3); see /COPYING. Copyright (C) 2026 metamuffin */ use crate::{EMPTY, OBB, Object, fields}; fields! { NAME: str = b"name"; AGE: u32 = b"age1"; FRIEND: str = b"frnd"; STUFF: Object = b"stff"; } fn test_object() -> Box { OBB::new() .with(NAME, "Bob") .with(AGE, 35) .with(FRIEND, "Alice") .with(FRIEND, "Charlie") .finish() } #[test] fn read_single_field() { let bob = test_object(); assert_eq!(bob.get(NAME), Some("Bob")); assert_eq!(bob.get(AGE), Some(35)); } #[test] fn read_multi_field() { let bob = test_object(); let mut friends = bob.iter(FRIEND); assert_eq!(friends.next(), Some("Alice")); assert_eq!(friends.next(), Some("Charlie")); assert_eq!(friends.next(), None); } #[test] fn vec_align_test() { let mut c = 0; for _ in 0..10_000 { let x = Vec::::with_capacity(16); if x.as_ptr().align_offset(4) == 0 { c += 1; } } assert_eq!(c, 10_000, "correctly aligned vecs by system allocator") } #[test] fn insert() { let bob = test_object(); let edward = bob.insert(NAME, "Edward"); eprintln!("{:#?}", bob); let edward = edward; eprintln!("{edward:#?}"); assert_eq!(edward.get(NAME), Some("Edward")); assert_eq!(edward.get(AGE), Some(35)); let mut friends = edward.iter(FRIEND); assert_eq!(friends.next(), Some("Alice")); assert_eq!(friends.next(), Some("Charlie")); assert_eq!(friends.next(), None); } #[test] fn insert_empty() { let ob = EMPTY.insert(NAME, "Romeo"); assert_eq!(ob.get(NAME), Some("Romeo")); let ob = EMPTY.insert(STUFF, EMPTY); assert_eq!(ob.get(STUFF), Some(EMPTY)); } #[test] fn debug() { assert_eq!( format!("{:?}", test_object()), "Object { age1: 35, frnd: \"Alice\", frnd: \"Charlie\", name: \"Bob\" }" ); }