use std::thread::sleep;
use crate::lib::Add;
use crate::prelude::Generator;
#[derive(Clone, Debug)]
pub struct EpochBasedGenerator;
impl Generator<u128> for EpochBasedGenerator {
fn generate(&self) -> u128 {
use std::time::SystemTime;
sleep(std::time::Duration::from_micros(10));
SystemTime::now()
.duration_since(SystemTime::UNIX_EPOCH)
.unwrap()
.as_nanos()
}
fn with_offset(&self, offset: u128) -> u128 {
offset.add(self.generate())
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_epoch_based_generator() {
let generator = EpochBasedGenerator;
let value = generator.generate();
let value_2 = generator.generate();
assert_ne!(value, value_2);
}
#[test]
fn test_epoch_based_generator_with_offset() {
let generator = EpochBasedGenerator;
let value = generator.generate();
let value_2 = generator.with_offset(100);
assert_ne!(value, value_2);
}
}