summaryrefslogtreecommitdiff
path: root/test/NaturalCollate-Test.vala
blob: 64c7ce5ad10566346c3253c905df2d411d2dbe05 (plain)
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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
void add_trailing_numbers_tests () {
    Test.add_func ("/functional/collation/trailing_numbers", () => {
            string a = "100foo";
            string b = "100bar";
            string coll_a = NaturalCollate.collate_key(a);
            string coll_b = NaturalCollate.collate_key(b);
            assert(strcmp(coll_a, coll_b) > 0);
            assert(strcmp(a,b) > 0);
            assert(NaturalCollate.compare(a,b) == strcmp(coll_a, coll_b));

            string atrail = "00100foo";
            string btrail = "0100bar";

            string coll_atrail = NaturalCollate.collate_key(a);
            string coll_btrail = NaturalCollate.collate_key(b);
            assert(strcmp(coll_a, coll_atrail) == 0);
            assert(strcmp(coll_b, coll_btrail) == 0);

            assert(strcmp(coll_atrail, coll_btrail) > 0);
            assert(strcmp(atrail,btrail) < 0);
            assert(NaturalCollate.compare(atrail,btrail) == strcmp(coll_atrail, coll_btrail));

        });
}

void add_numbers_tail_tests () {
    Test.add_func ("/functional/collation/numbers_tail", () => {
            string a = "aaa00100";
            string b = "aaa02";
            string coll_a = NaturalCollate.collate_key(a);
            string coll_b = NaturalCollate.collate_key(b);
            assert(strcmp(coll_a, coll_b) > 0);
            assert(strcmp(a,b) < 0);
            assert(NaturalCollate.compare(a,b) == strcmp(coll_a, coll_b));
        });
}

void add_dots_tests () {
    Test.add_func ("/functional/collation/dots", () => {
            string sa = "Foo01.jpg";
            string sb = "Foo2.jpg";
            string sc = "Foo3.jpg";
            string sd = "Foo10.jpg";

            assert (strcmp(sa, sd) < 0);
            assert (strcmp(sd, sb) < 0);
            assert (strcmp(sb, sc) < 0);

            string coll_sa = NaturalCollate.collate_key(sa);
            string coll_sb = NaturalCollate.collate_key(sb);
            string coll_sc = NaturalCollate.collate_key(sc);
            string coll_sd = NaturalCollate.collate_key(sd);

            assert (strcmp(coll_sa, coll_sb) < 0);
            assert (strcmp(coll_sb, coll_sc) < 0);
            assert (strcmp(coll_sc, coll_sd) < 0);
        });
}

void add_bigger_as_strcmp_tests () {
    Test.add_func ("/functional/collation/bigger_as_strcmp", () => {
            string a = "foo";
            string b = "bar";
            string coll_a = NaturalCollate.collate_key(a);
            string coll_b = NaturalCollate.collate_key(b);
            assert(strcmp(coll_a,coll_b) > 0);
            assert(strcmp(a,b) > 0);
            assert(NaturalCollate.compare(a,b) == strcmp(coll_a, coll_b));

            a = "foo0001";
            b = "bar0000";
            coll_a = NaturalCollate.collate_key(a);
            coll_b = NaturalCollate.collate_key(b);
            assert(strcmp(coll_a,coll_b) > 0);
            assert(strcmp(a,b) > 0);
            assert(NaturalCollate.compare(a,b) == strcmp(coll_a, coll_b));

            a = "bar010";
            b = "bar01";
            coll_a = NaturalCollate.collate_key(a);
            coll_b = NaturalCollate.collate_key(b);
            assert(strcmp(coll_a,coll_b) > 0);
            assert(strcmp(a,b) > 0);
            assert(NaturalCollate.compare(a,b) == strcmp(coll_a, coll_b));
        });
}

void add_numbers_tests() {
    Test.add_func ("/functional/collation/numbers", () => {
            string a = "0";
            string b = "1";
            string coll_a = NaturalCollate.collate_key(a);
            string coll_b = NaturalCollate.collate_key(b);
            assert(strcmp(coll_a, coll_b) < 0);

            a = "100";
            b = "101";
            coll_a = NaturalCollate.collate_key(a);
            coll_b = NaturalCollate.collate_key(b);
            assert(strcmp(coll_a, coll_b) < 0);

            a = "2";
            b = "10";
            coll_a = NaturalCollate.collate_key(a);
            coll_b = NaturalCollate.collate_key(b);
            assert(strcmp(coll_a, coll_b) < 0);

            a = "b20";
            b = "b100";
            coll_a = NaturalCollate.collate_key(a);
            coll_b = NaturalCollate.collate_key(b);
            assert(strcmp(coll_a, coll_b) < 0);
        });
}

void add_ignore_leading_zeros_tests () {
    Test.add_func ("/functional/collation/ignore_leading_zeros", () => {
            string a = "bar0000010";
            string b = "bar10";
            string coll_a = NaturalCollate.collate_key(a);
            string coll_b = NaturalCollate.collate_key(b);
            assert(strcmp(coll_a,coll_b) == 0);
        });
}

void main (string[] args) {
    GLib.Intl.setlocale(GLib.LocaleCategory.ALL, "");
    Test.init (ref args);
    add_trailing_numbers_tests();
    add_numbers_tail_tests();
    add_bigger_as_strcmp_tests();
    add_ignore_leading_zeros_tests();
    add_numbers_tests();
    add_dots_tests();
    Test.run();
}