use arctic::Order;
use arctic::concurrent;
use arctic::sequential;
use std::sync::Barrier;
#[test]
fn turso_range_24230c111c599daff93a7abc11c5c72b33d0ebfd() {
const fn turso_row_id(row_id: i64) -> u128 {
const SIGN: u64 = 1u64.rotate_right(1);
let table_id = (-1i64) as u64 ^ SIGN;
((table_id as u128) << 64) | (((row_id as u64) ^ SIGN) as u128)
}
let mut map = sequential::Map::<u128, u64>::default();
let entries = (0..10u64)
.map(|index| (turso_row_id(index as i64), index))
.collect::<Vec<_>>();
for (row_id, index) in &entries {
assert!(map.upsert(*row_id, *index).is_err());
}
for (row_id, index) in &entries {
assert_eq!(map.get(row_id), Some(index));
}
let prefix = map.range(turso_row_id(5)..=turso_row_id(i64::MAX));
let values = prefix.values(Order::Ascend).copied().collect::<Vec<_>>();
assert_eq!(values, (5..10).collect::<Vec<u64>>());
}
#[test]
fn insert_duplicate_82007770fb876db856313cebf12be21b9182f16a() {
let map = concurrent::Map::<u64, u64>::default();
map.insert(0u64, 0u64).unwrap();
map.insert(0u64, 1u64).unwrap_err();
}
#[test]
fn range_common_prefix_72c2fceda258b00fc2e9d4a805b28e9ad8e8107d() {
let map = crate::concurrent::Map::<u64, u64>::new();
const NEEDLE: u64 = 0xE642_3BB1_ADBB_F000;
const LOWER: u64 = 0x39_9100;
const UPPER: u64 = 0xFF29_D24D_7E9A_920D;
map.insert(NEEDLE, 0).unwrap();
map.range(LOWER..=UPPER)
.entries(Order::Ascend)
.for_each(|(key, value)| {
assert_eq!(key, NEEDLE);
assert_eq!(value, 0);
})
}
#[test]
fn disjoint_crud_remains_immediately_visible_under_contention() {
let map = concurrent::Map::<u64, Box<u64>>::default();
let barrier = Barrier::new(9);
std::thread::scope(|scope| {
for worker in 0..8u64 {
let map = ↦
let barrier = &barrier;
scope.spawn(move || {
barrier.wait();
for sequence in 0..10_000u64 {
let key = worker * 10_000 + sequence;
map.insert(key, Box::new(key + 1))
.unwrap_or_else(|_| panic!("disjoint key already existed: {key}"));
assert_eq!(map.get(&key).as_deref().copied(), Some(key + 1));
assert_eq!(map.remove(&key).as_deref().copied(), Some(key + 1));
}
});
}
barrier.wait();
});
assert!(map.all().entries(Order::Ascend).next().is_none());
}