diff --git a/crates/series/src/main.rs b/crates/series/src/main.rs index 2c32c09..f8d918b 100644 --- a/crates/series/src/main.rs +++ b/crates/series/src/main.rs @@ -89,7 +89,7 @@ fn main() -> ExitCode { return ExitCode::FAILURE; } - points.sort_by_key(|(ts, _)| ts.timestamp()); + points.sort_by_key(|(ts, _)| *ts); render(&points); ExitCode::SUCCESS } diff --git a/crates/series/tests/cli.rs b/crates/series/tests/cli.rs index a3f65b7..10f1a96 100644 --- a/crates/series/tests/cli.rs +++ b/crates/series/tests/cli.rs @@ -34,6 +34,20 @@ fn sorts_and_summarizes() { assert!(stdout.contains('▁'), "no trough block:\n{stdout}"); } +#[test] +fn sorts_within_the_same_second() { + // rows print at second resolution, so the values tell the order apart + let out = run("2026-09-03T10:20:00.900+09:00 9\n2026-09-03T10:20:00.100+09:00 1\n"); + assert!(out.status.success()); + let stdout = String::from_utf8(out.stdout).unwrap(); + let values: Vec<&str> = stdout + .lines() + .take_while(|l| !l.is_empty()) + .filter_map(|l| l.split_whitespace().last()) + .collect(); + assert_eq!(values, ["1", "9"], "stdout:\n{stdout}"); +} + #[test] fn skips_garbage_but_still_succeeds() { let out = run(include_str!("fixtures/invalid.txt"));