#![cfg(not(target_arch = "wasm32"))]
use digdigdig3_station::data::{BasisPoint, FundingSettlementPoint};
use digdigdig3_station::DataPoint;
#[test]
fn basis_point_is_32_bytes() {
assert_eq!(BasisPoint::RECORD_SIZE, 32);
}
#[test]
fn basis_point_encode_decode_stable() {
let p = BasisPoint {
ts_ms: 1_700_000_000_123,
value: -5.5,
mark: 70_000.0,
index: 70_005.5,
};
let mut buf = vec![0u8; BasisPoint::RECORD_SIZE];
p.encode(&mut buf);
let back = BasisPoint::decode(&buf).expect("decode must succeed");
assert_eq!(back.ts_ms, p.ts_ms);
assert!((back.value - p.value).abs() < 1e-9);
assert_eq!(back.mark, p.mark);
assert_eq!(back.index, p.index);
assert_eq!(back.timestamp_ms(), p.ts_ms);
let mut buf2 = vec![0u8; BasisPoint::RECORD_SIZE];
back.encode(&mut buf2);
assert_eq!(buf, buf2, "encode must be stable across round-trip");
}
#[test]
fn basis_point_value_invariant() {
let mark = 50_123.456_f64;
let index = 50_113.0_f64;
let p = BasisPoint { ts_ms: 1, value: mark - index, mark, index };
let mut buf = vec![0u8; BasisPoint::RECORD_SIZE];
p.encode(&mut buf);
let back = BasisPoint::decode(&buf).unwrap();
let expected = back.mark - back.index;
assert!(
(back.value - expected).abs() < 1e-6,
"value={} expected={} (mark - index)",
back.value,
expected
);
}
#[test]
fn basis_point_decode_wrong_length_returns_none() {
let buf = vec![0u8; 24]; assert!(
BasisPoint::decode(&buf).is_none(),
"decoding 24 bytes into 32-byte record must return None"
);
}
#[test]
fn funding_settlement_point_is_32_bytes() {
assert_eq!(FundingSettlementPoint::RECORD_SIZE, 32);
}
#[test]
fn funding_settlement_encode_decode_stable() {
let p = FundingSettlementPoint {
ts_ms: 1_700_000_001_000,
settled_rate: 0.0001_f64,
settlement_time: 1_700_000_000_000_i64,
};
let mut buf = vec![0u8; FundingSettlementPoint::RECORD_SIZE];
p.encode(&mut buf);
let back = FundingSettlementPoint::decode(&buf).expect("decode must succeed");
assert_eq!(back.ts_ms, p.ts_ms);
assert!((back.settled_rate - p.settled_rate).abs() < 1e-12);
assert_eq!(back.settlement_time, p.settlement_time);
let mut buf2 = vec![0u8; FundingSettlementPoint::RECORD_SIZE];
back.encode(&mut buf2);
assert_eq!(buf, buf2, "encode must be stable across round-trip");
}