rivetkit-core 2.3.10

Core runtime primitives for RivetKit actor hosts
Documentation
use super::{KV_TX_MAX_PAYLOAD_BYTES, KV_TX_MAX_ROWS, split_kv_tx_chunks};

#[test]
fn kv_transaction_chunks_enforce_exact_row_boundaries() {
	for (row_count, expected_chunks) in [(127, 1), (128, 1), (129, 2)] {
		let entries = (0usize..row_count)
			.map(|index| (index.to_be_bytes().to_vec(), vec![0]))
			.collect::<Vec<_>>();
		let chunks = split_kv_tx_chunks(&entries);
		assert_eq!(chunks.len(), expected_chunks);
		assert!(chunks.iter().all(|chunk| chunk.len() <= KV_TX_MAX_ROWS));
		assert_eq!(
			chunks.iter().map(|chunk| chunk.len()).sum::<usize>(),
			row_count
		);
	}
}

#[test]
fn kv_transaction_chunks_enforce_exact_payload_boundaries() {
	let half = KV_TX_MAX_PAYLOAD_BYTES / 2;
	let exact = vec![
		(b"a".to_vec(), vec![0; half - 1]),
		(b"b".to_vec(), vec![0; half - 1]),
	];
	assert_eq!(
		exact
			.iter()
			.map(|(key, value)| key.len() + value.len())
			.sum::<usize>(),
		KV_TX_MAX_PAYLOAD_BYTES
	);
	assert_eq!(split_kv_tx_chunks(&exact).len(), 1);

	let over = vec![
		(b"a".to_vec(), vec![0; half]),
		(b"b".to_vec(), vec![0; half - 1]),
	];
	assert_eq!(
		over.iter()
			.map(|(key, value)| key.len() + value.len())
			.sum::<usize>(),
		KV_TX_MAX_PAYLOAD_BYTES + 1
	);
	assert_eq!(split_kv_tx_chunks(&over).len(), 2);
}