use bbg::signal::{Cyberlink, Signal};
use bbg::state::balance_key;
use bbg::BbgState;
fn link(to: [u8; 32], token: [u8; 32], amount: u64) -> Cyberlink {
Cyberlink { from: [9u8; 32], to, token, amount, valence: 0 }
}
fn push(state: &mut BbgState, links: Vec<Cyberlink>) {
state
.insert(&Signal { neuron: [7u8; 32], links, box_moves: vec![], height: 0 })
.unwrap();
}
#[test]
fn balance_credit_saturates_instead_of_overflowing() {
let to = [1u8; 32];
let token = [2u8; 32];
let mut state = BbgState::new();
push(&mut state, vec![link(to, token, u64::MAX)]);
push(&mut state, vec![link(to, token, 1)]);
let key = balance_key(&to, &token);
assert_eq!(state.balances.get(&key), Some(&u64::MAX));
}
#[test]
fn balance_credit_saturates_within_one_signal() {
let to = [3u8; 32];
let token = [4u8; 32];
let mut state = BbgState::new();
push(&mut state, vec![link(to, token, u64::MAX), link(to, token, 5)]);
let key = balance_key(&to, &token);
assert_eq!(state.balances.get(&key), Some(&u64::MAX));
}