| 688 | |
| 689 | #[test] |
| 690 | fn raw_put_timing() { |
| 691 | let mut e = make_engine(); |
| 692 | let n = now(); |
| 693 | let keys: Vec<Vec<u8>> = (0..10_000u32).map(|i| i.to_be_bytes().to_vec()).collect(); |
| 694 | let value = [0u8; 64]; |
| 695 | |
| 696 | // Warmup: insert all keys once. |
| 697 | for key in &keys { |
| 698 | e.put(1, "b", key, &value, 0, n, Surrogate::ZERO); |
| 699 | } |
| 700 | |
| 701 | // Timed: 100K updates (keys already exist). |
| 702 | let iters = 100_000u64; |
| 703 | let start = std::time::Instant::now(); |
| 704 | for i in 0..iters { |
| 705 | let key = &keys[(i as usize) % 10_000]; |
| 706 | e.put(1, "b", key, &value, 0, n, Surrogate::ZERO); |
| 707 | } |
| 708 | let elapsed = start.elapsed(); |
| 709 | let ns_per_op = elapsed.as_nanos() / iters as u128; |
| 710 | // 691 ns/op measured — well under document's 12μs. |
| 711 | assert!(ns_per_op < 5_000, "PUT too slow: {ns_per_op} ns/op"); |
| 712 | } |
| 713 | } |