1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
|
/*
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 <metamuffin.org>
*/
use crate::{Object, ObjectBuffer, fields};
fields! {
NAME: &str = b"name";
AGE: u32 = b"age1";
FRIEND: &str = b"frnd";
STUFF: Object = b"stff";
}
fn test_object() -> ObjectBuffer {
ObjectBuffer::new(&mut [
(NAME.0, &"Bob"),
(AGE.0, &35_u32),
(FRIEND.0, &"Alice"),
(FRIEND.0, &"Charlie"),
])
}
#[test]
fn read_single_field() {
let bob = test_object();
let bob = bob.as_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 bob = bob.as_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::<u8>::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.as_object().insert(NAME, "Edward");
eprintln!("{:#?}", bob.as_object());
let edward = edward.as_object();
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 = Object::EMPTY.insert(NAME, "Romeo");
assert_eq!(ob.as_object().get(NAME), Some("Romeo"));
let ob = Object::EMPTY.insert(STUFF, Object::EMPTY);
assert_eq!(ob.as_object().get(STUFF), Some(Object::EMPTY));
}
#[test]
fn debug() {
assert_eq!(
format!("{:?}", test_object()),
"Object { age1: 35, frnd: \"Alice\", frnd: \"Charlie\", name: \"Bob\" }"
);
}
|