mirror of
https://github.com/jmcorgan/fips.git
synced 2026-07-30 19:46:15 +00:00
Bring the proto tree closer to a std+alloc-only posture, behavior unchanged on every decision path: - Sweep the remaining std::fmt and std::collections imports over to core::fmt and alloc::collections across the wire codecs and their tests. Subsystem files that shadow the core name with a child core module use the leading-colon ::core::fmt form. Imports only. - Replace the two f64::powi calls (bloom false-positive-rate, FMP backoff timer) with a shared core-only square-and-multiply helper in proto/math, bit-identical to std::powi (a guard test pins this against every exponent the codecs reach), and route the diagnostic estimated-count natural log through libm::log. The FPR reject decision and the backoff timer are bit-for-bit unchanged; only the debug-only count estimate may differ by at most one ULP.
45 lines
1.4 KiB
Rust
45 lines
1.4 KiB
Rust
//! Shared test helpers for the STP primitive unit tests.
|
|
|
|
use alloc::collections::BTreeMap;
|
|
|
|
use crate::NodeAddr;
|
|
use crate::proto::stp::{ParentDeclaration, TreeCoordinate, TreeState};
|
|
|
|
pub(super) fn make_node_addr(val: u8) -> NodeAddr {
|
|
let mut bytes = [0u8; 16];
|
|
bytes[0] = val;
|
|
NodeAddr::from_bytes(bytes)
|
|
}
|
|
|
|
pub(super) fn make_coords(ids: &[u8]) -> TreeCoordinate {
|
|
TreeCoordinate::from_addrs(ids.iter().map(|&v| make_node_addr(v)).collect()).unwrap()
|
|
}
|
|
|
|
/// Build a TreeState with our own coordinates set.
|
|
pub(super) fn make_tree_state(my_addr: u8, coord_path: &[u8]) -> TreeState {
|
|
let my_node = make_node_addr(my_addr);
|
|
let mut state = TreeState::new(my_node, 1000);
|
|
let coords = make_coords(coord_path);
|
|
state.root = *coords.root_id();
|
|
state.my_coords = coords;
|
|
state
|
|
}
|
|
|
|
/// Add a peer with given coordinates to the tree state.
|
|
pub(super) fn add_peer(state: &mut TreeState, peer_addr: u8, coord_path: &[u8]) {
|
|
let peer = make_node_addr(peer_addr);
|
|
let parent = make_node_addr(coord_path[1]);
|
|
state.update_peer(
|
|
ParentDeclaration::new(peer, parent, 1, 1000),
|
|
make_coords(coord_path),
|
|
);
|
|
}
|
|
|
|
/// Build a peer_costs map from (addr_byte, cost) pairs.
|
|
pub(super) fn make_costs(entries: &[(u8, f64)]) -> BTreeMap<NodeAddr, f64> {
|
|
entries
|
|
.iter()
|
|
.map(|&(addr, cost)| (make_node_addr(addr), cost))
|
|
.collect()
|
|
}
|