You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
41 lines
1.3 KiB
Rust
41 lines
1.3 KiB
Rust
use chronofold::{Chronofold, ChronofoldError, LogIndex, Op, Timestamp};
|
|
|
|
#[test]
|
|
fn unknown_timestamp() {
|
|
let mut cfold = Chronofold::<u8, char>::default();
|
|
let unknown = Timestamp(LogIndex(1), 42);
|
|
let op = Op::insert(Timestamp(LogIndex(1), 1), Some(unknown), '!');
|
|
let err = cfold.apply(op.clone()).unwrap_err();
|
|
assert_eq!(ChronofoldError::UnknownReference(op), err);
|
|
assert_eq!("unknown reference <1, 42>", format!("{err}"));
|
|
}
|
|
|
|
#[test]
|
|
fn future_timestamp() {
|
|
let mut cfold = Chronofold::<u8, char>::default();
|
|
let op = Op::insert(
|
|
Timestamp(LogIndex(9), 1),
|
|
Some(Timestamp(LogIndex(0), 0)),
|
|
'.',
|
|
);
|
|
let err = cfold.apply(op.clone()).unwrap_err();
|
|
assert_eq!(ChronofoldError::FutureTimestamp(op), err);
|
|
assert_eq!("future timestamp <9, 1>", format!("{err}"));
|
|
}
|
|
|
|
#[test]
|
|
fn existing_timestamp() {
|
|
// Applying the same op twice results in a
|
|
// `ChronofoldError::ExistingTimestamp`:
|
|
let mut cfold = Chronofold::<u8, char>::default();
|
|
let op = Op::insert(
|
|
Timestamp(LogIndex(1), 1),
|
|
Some(Timestamp(LogIndex(0), 0)),
|
|
'.',
|
|
);
|
|
assert_eq!(Ok(()), cfold.apply(op.clone()));
|
|
let err = cfold.apply(op.clone()).unwrap_err();
|
|
assert_eq!(ChronofoldError::ExistingTimestamp(op), err);
|
|
assert_eq!("existing timestamp <1, 1>", format!("{err}"));
|
|
}
|