Make the Rust suite green and stop silently ignoring packages

exact_reliable_acks_clear_more_than_one_ack_window_of_fragments has been
failing on main. It was not a defect: send_many returned 32 packets where the
test expected 40, and 32 is exactly CULTNET_RUDP_RELIABLE_SEND_WINDOW_PACKETS.
The reliable send window landed and this test kept asserting the pre-window
behaviour, so a test whose name is about crossing an ack window had stopped
crossing one. It now asserts that a window's worth leaves immediately, that
the remaining eight fragments queue, and that acknowledgements promote them
until every fragment is delivered -- the same loop packages/cultnet-rs/tests
/cultnet.rs already uses for this contract.

All three Rust crates are green: 46, 95 and 7.

The NuGet packages rule hides every language package until one is named in
the re-include list, and cultmath, cultmesh-browser and cultmesh-kotlin were
never added. Nothing is currently lost -- every source file in them is
tracked -- but any new file added to those three would have been dropped in
silence. cultmesh-rs hit this on the way in.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Meta Vens 2026-09-04 00:01:17 +02:00
commit 4c0dc07ba5
2 changed files with 28 additions and 5 deletions

6
.gitignore vendored
View file

@ -309,6 +309,12 @@ node_modules/
!packages/cultnet-rs/** !packages/cultnet-rs/**
!packages/cultmesh-rs/ !packages/cultmesh-rs/
!packages/cultmesh-rs/** !packages/cultmesh-rs/**
!packages/cultmath/
!packages/cultmath/**
!packages/cultmesh-browser/
!packages/cultmesh-browser/**
!packages/cultmesh-kotlin/
!packages/cultmesh-kotlin/**
packages/**/node_modules/ packages/**/node_modules/
packages/**/dist/ packages/**/dist/
packages/**/dist-test/ packages/**/dist-test/

View file

@ -1,3 +1,4 @@
use std::collections::VecDeque;
use std::net::UdpSocket; use std::net::UdpSocket;
use std::time::Duration; use std::time::Duration;
@ -317,16 +318,32 @@ fn exact_reliable_acks_clear_more_than_one_ack_window_of_fragments() -> Result<(
}, },
Some(1), Some(1),
)?; )?;
assert_eq!(packets.len(), 40); // Forty one-byte fragments cannot leave inside one reliable send window. The
// window's worth goes out now and the rest queue until acknowledgements free
// space, which is the crossing this test exists to prove.
assert_eq!(packets.len(), CULTNET_RUDP_RELIABLE_SEND_WINDOW_PACKETS);
assert_eq!(
sender.queued_reliable_packet_count(),
40 - CULTNET_RUDP_RELIABLE_SEND_WINDOW_PACKETS
);
let mut wire = VecDeque::from(packets);
let mut delivered = Vec::new(); let mut delivered = Vec::new();
for packet in &packets { while !wire.is_empty() {
let result = receiver.receive(packet, 2)?; let admitted = wire.len();
delivered.extend(result.delivered); for _ in 0..admitted {
sender.receive(&receiver.create_ack_for(packet.sequence), 3)?; let packet = wire.pop_front().expect("admitted packet remains queued");
let received = receiver.receive(&packet, 2)?;
delivered.extend(received.delivered);
}
let acknowledged = sender.receive(&receiver.create_ack(), 3)?;
wire.extend(acknowledged.ready_to_send);
} }
assert_eq!(delivered.len(), 1); assert_eq!(delivered.len(), 1);
assert_eq!(delivered[0].payload, vec![0x5a; 40]); assert_eq!(delivered[0].payload, vec![0x5a; 40]);
assert!(sender.pending_reliable_sequences().is_empty()); assert!(sender.pending_reliable_sequences().is_empty());
assert_eq!(sender.outstanding_reliable_packet_count(), 0);
Ok(()) Ok(())
} }