|
1 | | -//! Test cases from systemd's src/test/test-string-util.c |
| 1 | +//! Most test cases come from systemd's src/test/test-string-util.c |
2 | 2 |
|
3 | 3 | use std::cmp::Ordering; |
4 | 4 |
|
5 | 5 | use uapi_version::{strverscmp, Version}; |
6 | 6 |
|
7 | 7 | fn assert_ordering(a: &str, b: &str, expected: Ordering) { |
8 | 8 | let ordering = strverscmp(a, b); |
| 9 | + if ordering != expected { |
| 10 | + println!("Wrong ordering: {a}, {b}"); |
| 11 | + } |
9 | 12 | assert_eq!(ordering, expected); |
10 | 13 | } |
11 | 14 |
|
@@ -73,6 +76,31 @@ fn order() { |
73 | 76 | } |
74 | 77 | } |
75 | 78 |
|
| 79 | +/// Test data comes from systemd's `strverscmp_improved` docstring in src/fundamental/string-util-fundamental.c |
| 80 | +#[test] |
| 81 | +fn order_strverscmp_improved_doc() { |
| 82 | + let versions = [ |
| 83 | + "122.1", |
| 84 | + "123~rc1-1", |
| 85 | + "123", |
| 86 | + "123-a", |
| 87 | + "123-a.1", |
| 88 | + "123-1", |
| 89 | + "123-1.1", |
| 90 | + "123^post1", |
| 91 | + "123.a-1", |
| 92 | + "123.1-1", |
| 93 | + "123a-1", |
| 94 | + "124-1", |
| 95 | + ]; |
| 96 | + |
| 97 | + for (i, first) in versions.iter().enumerate() { |
| 98 | + for next in versions.iter().skip(i + 1) { |
| 99 | + assert_smaller(first, next); |
| 100 | + } |
| 101 | + } |
| 102 | +} |
| 103 | + |
76 | 104 | #[test] |
77 | 105 | fn compare() { |
78 | 106 | assert_smaller_list(&[ |
@@ -184,3 +212,32 @@ fn zeros() { |
184 | 212 | ("0.0.9", "1.0.0"), |
185 | 213 | ]); |
186 | 214 | } |
| 215 | + |
| 216 | +/// Test data comes from the examples from the UAPI version spec. |
| 217 | +#[test] |
| 218 | +fn uapi_spec_examples() { |
| 219 | + assert_ordering_list(&[ |
| 220 | + ("11", "11", Ordering::Equal), |
| 221 | + ("systemd-123", "systemd-123", Ordering::Equal), |
| 222 | + ("bar-123", "foo-123", Ordering::Less), |
| 223 | + ("123a", "123", Ordering::Greater), |
| 224 | + ("123.a", "123", Ordering::Greater), |
| 225 | + ("123.a", "123.b", Ordering::Less), |
| 226 | + ("123a", "123.a", Ordering::Greater), |
| 227 | + ("11α", "11β", Ordering::Equal), |
| 228 | + ("A", "a", Ordering::Less), |
| 229 | + ("", "0", Ordering::Less), |
| 230 | + ("0.", "0", Ordering::Greater), |
| 231 | + ("0.0", "0", Ordering::Greater), |
| 232 | + ("0", "~", Ordering::Greater), |
| 233 | + ("", "~", Ordering::Greater), |
| 234 | + ("1_", "1", Ordering::Equal), |
| 235 | + ("_1", "1", Ordering::Equal), |
| 236 | + ("1_", "1.2", Ordering::Less), |
| 237 | + ("1_2_3", "1.3.3", Ordering::Greater), |
| 238 | + ("1+", "1", Ordering::Equal), |
| 239 | + ("+1", "1", Ordering::Equal), |
| 240 | + ("1+", "1.2", Ordering::Less), |
| 241 | + ("1+2+3", "1.3.3", Ordering::Greater), |
| 242 | + ]); |
| 243 | +} |
0 commit comments