Complete native codegen milestone gate (#50)
Some checks failed
Native code generation / deterministic (push) Failing after 6m6s
Imaging and meshing gate / native (push) Failing after 17s
JPEG 2000 feature / linux (push) Failing after 59s
Skia feature / linux (push) Failing after 1m57s

This commit is contained in:
2026-08-09 10:06:11 +00:00
parent 4a32025e37
commit 167f469fc2
12 changed files with 67806 additions and 11139 deletions

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,115 @@
use libremetaverse::packets::{
AgentMovementCompletePacketDataBlock, AgentThrottlePacketThrottleBlock, Packet,
PacketAckPacket, PacketAckPacketPacketsBlock, PacketType, TestMessagePacket,
};
use libremetaverse_structured_data::{OSD, OSDMap};
use std::collections::HashMap;
fn map(values: impl IntoIterator<Item = (&'static str, OSD)>) -> OSD {
OSD::Map(
values
.into_iter()
.map(|(key, value)| (key.to_owned(), value))
.collect::<HashMap<_, _>>(),
)
}
#[test]
fn block_osd_matches_unsigned_and_missing_field_reference_semantics() {
let mut block = AgentMovementCompletePacketDataBlock::new_with_constructor().unwrap();
block.region_handle = 0x0102_0304_0506_0708;
block.timestamp = 0x1122_3344;
let encoded = block.to_osd().unwrap();
assert_eq!(
encoded.get("RegionHandle"),
Some(OSD::Binary(vec![
0x08, 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01
]))
);
assert_eq!(
encoded.get("Timestamp"),
Some(OSD::Binary(vec![0x44, 0x33, 0x22, 0x11]))
);
let partial = OSDMap::new_with_constructor().unwrap();
partial
.add_with_string_osd("Timestamp".to_owned(), OSD::Binary(vec![1, 2, 3]))
.unwrap();
block.from_osd(partial).unwrap();
assert_eq!(block.timestamp, 0);
assert_eq!(block.region_handle, 0x0102_0304_0506_0708);
}
#[test]
fn byte_fields_accept_osd_strings_as_utf8_like_the_reference_generator() {
let mut block = AgentThrottlePacketThrottleBlock::new_with_constructor().unwrap();
let source = OSDMap::new_with_constructor().unwrap();
source
.add_with_string_osd("Throttles".to_owned(), OSD::String("throttle".to_owned()))
.unwrap();
block.from_osd(source).unwrap();
assert_eq!(block.throttles, b"throttle");
}
#[test]
fn packet_osd_replaces_variable_blocks_and_restores_fixed_block_counts() {
let mut variable = PacketAckPacket::new_with_constructor().unwrap();
let mut old = PacketAckPacketPacketsBlock::new_with_constructor().unwrap();
old.id = 99;
variable.packets.push(old);
let variable_body = OSDMap::new_with_constructor().unwrap();
variable_body
.add_with_string_osd(
"Packets".to_owned(),
OSD::Array(vec![
map([("ID", OSD::Binary(7_u32.to_le_bytes().to_vec()))]),
OSD::Undefined,
]),
)
.unwrap();
variable.packet_from_osd(variable_body).unwrap();
assert_eq!(variable.packets.len(), 2);
assert_eq!(variable.packets[0].id, 7);
assert_eq!(variable.packets[1].id, 0);
let mut fixed = TestMessagePacket::new_with_constructor().unwrap();
fixed.neighbor_block.clear();
let fixed_body = OSDMap::new_with_constructor().unwrap();
fixed_body
.add_with_string_osd(
"NeighborBlock".to_owned(),
OSD::Array(vec![
map([("Test0", OSD::Binary(42_u32.to_le_bytes().to_vec()))]),
OSD::String("not a block map".to_owned()),
]),
)
.unwrap();
fixed.packet_from_osd(fixed_body).unwrap();
assert_eq!(fixed.neighbor_block.len(), 4);
assert_eq!(fixed.neighbor_block[0].test0, 42);
assert!(
fixed.neighbor_block[1..]
.iter()
.all(|block| block.test0 == 0)
);
}
#[test]
fn osd_packet_factory_validates_known_bodies_and_rejects_unknown_names() {
let body = OSDMap::new_with_constructor().unwrap();
body.add_with_string_osd("Packets".to_owned(), OSD::Array(Vec::new()))
.unwrap();
let packet = Packet::build_packet_from_osd("PacketAck".to_owned(), body.clone())
.unwrap()
.expect("known packet");
assert_eq!(packet.type_, PacketType::PacketAck);
assert!(
Packet::build_packet_from_osd("UnknownPacket".to_owned(), body)
.unwrap()
.is_none()
);
}