File: unicollate.rs

package info (click to toggle)
rust-glib 0.20.9-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,308 kB
  • sloc: makefile: 18
file content (98 lines) | stat: -rw-r--r-- 2,274 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
use glib::{CollationKey, FilenameCollationKey};

fn init() {
    use std::sync::Once;
    static ONCE: Once = Once::new();

    // Make sure that all tests below are running with the system
    // locale and not the "C" locale.
    ONCE.call_once(|| unsafe {
        libc::setlocale(libc::LC_ALL, b"\0".as_ptr() as *const _);
    });
}

#[test]
fn collate() {
    init();

    let mut unsorted = vec![
        String::from("bcd"),
        String::from("cde"),
        String::from("abc"),
    ];

    let sorted = vec![
        String::from("abc"),
        String::from("bcd"),
        String::from("cde"),
    ];

    unsorted.sort_by(|s1, s2| CollationKey::from(&s1).cmp(&CollationKey::from(&s2)));

    assert_eq!(unsorted, sorted);
}

#[test]
fn collate_non_ascii() {
    init();

    let mut unsorted = vec![
        String::from("猫の手も借りたい"),
        String::from("日本語は難しい"),
        String::from("ありがとう"),
    ];

    let sorted = vec![
        String::from("ありがとう"),
        String::from("日本語は難しい"),
        String::from("猫の手も借りたい"),
    ];

    unsorted.sort_by(|s1, s2| CollationKey::from(&s1).cmp(&CollationKey::from(&s2)));

    assert_eq!(unsorted, sorted);
}

#[test]
fn collate_filenames() {
    init();

    let mut unsorted = vec![
        String::from("bcd.a"),
        String::from("cde.b"),
        String::from("abc.c"),
    ];

    let sorted = vec![
        String::from("abc.c"),
        String::from("bcd.a"),
        String::from("cde.b"),
    ];

    unsorted
        .sort_by(|s1, s2| FilenameCollationKey::from(&s1).cmp(&FilenameCollationKey::from(&s2)));

    assert_eq!(unsorted, sorted);
}

#[test]
fn collate_filenames_non_ascii() {
    init();

    let mut unsorted = vec![
        String::from("猫の手も借りたい.foo"),
        String::from("日本語は難しい.bar"),
        String::from("ありがとう.baz"),
    ];

    let sorted = vec![
        String::from("ありがとう.baz"),
        String::from("日本語は難しい.bar"),
        String::from("猫の手も借りたい.foo"),
    ];

    unsorted
        .sort_by(|s1, s2| FilenameCollationKey::from(&s1).cmp(&FilenameCollationKey::from(&s2)));

    assert_eq!(unsorted, sorted);
}