use crate::field::Ordering;
pub fn monotonic_value(record: u64, tag: u64, min: i64, max: i64, ordering: Ordering) -> i64 {
if ordering == Ordering::None || min >= max {
return min;
}
let range = (max - min) as u128;
let step = (range / 1_000_000).max(1);
let jitter_max = (step / 4).max(1) as u64;
let jitter = u128::from(tag % jitter_max); let pos = u128::from(record) * step + jitter;
let v = match ordering {
Ordering::Asc => min as u128 + pos.min(range),
Ordering::Desc => max as u128 - pos.min(range),
Ordering::None => min as u128,
};
(v as i64).clamp(min, max)
}