annotate tests/test-filevercmp.c @ 11429:a32a8b26323e

filevercmp: handle simple~ and numbered.~3~ backup suffixes * lib/filevercmp.c: Handle simple~ and numbered.~3~ backup suffixes. * tests/test-filevercmp.c: Add tests for backup suffixes. Reported by Sven Joachim.
author Kamil Dudka <kdudka@redhat.com>
date Fri, 20 Mar 2009 11:20:12 +0100
parents 98bcf3f48aa7
children ecb28ce608f1
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
10573
39f73ea22045 filevercmp: new module
Kamil Dudka <kdudka@redhat.com>
parents:
diff changeset
1 /* Test of filevercmp() function.
11429
a32a8b26323e filevercmp: handle simple~ and numbered.~3~ backup suffixes
Kamil Dudka <kdudka@redhat.com>
parents: 11266
diff changeset
2 Copyright (C) 2008-2009 Free Software Foundation, Inc.
10573
39f73ea22045 filevercmp: new module
Kamil Dudka <kdudka@redhat.com>
parents:
diff changeset
3
39f73ea22045 filevercmp: new module
Kamil Dudka <kdudka@redhat.com>
parents:
diff changeset
4 This program is free software; you can redistribute it and/or modify
39f73ea22045 filevercmp: new module
Kamil Dudka <kdudka@redhat.com>
parents:
diff changeset
5 it under the terms of the GNU General Public License as published by
39f73ea22045 filevercmp: new module
Kamil Dudka <kdudka@redhat.com>
parents:
diff changeset
6 the Free Software Foundation; either version 3, or (at your option)
39f73ea22045 filevercmp: new module
Kamil Dudka <kdudka@redhat.com>
parents:
diff changeset
7 any later version.
39f73ea22045 filevercmp: new module
Kamil Dudka <kdudka@redhat.com>
parents:
diff changeset
8
39f73ea22045 filevercmp: new module
Kamil Dudka <kdudka@redhat.com>
parents:
diff changeset
9 This program is distributed in the hope that it will be useful,
39f73ea22045 filevercmp: new module
Kamil Dudka <kdudka@redhat.com>
parents:
diff changeset
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
39f73ea22045 filevercmp: new module
Kamil Dudka <kdudka@redhat.com>
parents:
diff changeset
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
39f73ea22045 filevercmp: new module
Kamil Dudka <kdudka@redhat.com>
parents:
diff changeset
12 GNU General Public License for more details.
39f73ea22045 filevercmp: new module
Kamil Dudka <kdudka@redhat.com>
parents:
diff changeset
13
39f73ea22045 filevercmp: new module
Kamil Dudka <kdudka@redhat.com>
parents:
diff changeset
14 You should have received a copy of the GNU General Public License
39f73ea22045 filevercmp: new module
Kamil Dudka <kdudka@redhat.com>
parents:
diff changeset
15 along with this program; if not, write to the Free Software Foundation,
39f73ea22045 filevercmp: new module
Kamil Dudka <kdudka@redhat.com>
parents:
diff changeset
16 Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
39f73ea22045 filevercmp: new module
Kamil Dudka <kdudka@redhat.com>
parents:
diff changeset
17
39f73ea22045 filevercmp: new module
Kamil Dudka <kdudka@redhat.com>
parents:
diff changeset
18 #include <config.h>
39f73ea22045 filevercmp: new module
Kamil Dudka <kdudka@redhat.com>
parents:
diff changeset
19
39f73ea22045 filevercmp: new module
Kamil Dudka <kdudka@redhat.com>
parents:
diff changeset
20 #include "filevercmp.h"
39f73ea22045 filevercmp: new module
Kamil Dudka <kdudka@redhat.com>
parents:
diff changeset
21
39f73ea22045 filevercmp: new module
Kamil Dudka <kdudka@redhat.com>
parents:
diff changeset
22 #include <stdio.h>
39f73ea22045 filevercmp: new module
Kamil Dudka <kdudka@redhat.com>
parents:
diff changeset
23 #include <stdlib.h>
39f73ea22045 filevercmp: new module
Kamil Dudka <kdudka@redhat.com>
parents:
diff changeset
24
39f73ea22045 filevercmp: new module
Kamil Dudka <kdudka@redhat.com>
parents:
diff changeset
25 #define ASSERT(expr) \
39f73ea22045 filevercmp: new module
Kamil Dudka <kdudka@redhat.com>
parents:
diff changeset
26 do \
39f73ea22045 filevercmp: new module
Kamil Dudka <kdudka@redhat.com>
parents:
diff changeset
27 { \
39f73ea22045 filevercmp: new module
Kamil Dudka <kdudka@redhat.com>
parents:
diff changeset
28 if (!(expr)) \
39f73ea22045 filevercmp: new module
Kamil Dudka <kdudka@redhat.com>
parents:
diff changeset
29 { \
39f73ea22045 filevercmp: new module
Kamil Dudka <kdudka@redhat.com>
parents:
diff changeset
30 fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \
39f73ea22045 filevercmp: new module
Kamil Dudka <kdudka@redhat.com>
parents:
diff changeset
31 fflush (stderr); \
39f73ea22045 filevercmp: new module
Kamil Dudka <kdudka@redhat.com>
parents:
diff changeset
32 abort (); \
39f73ea22045 filevercmp: new module
Kamil Dudka <kdudka@redhat.com>
parents:
diff changeset
33 } \
39f73ea22045 filevercmp: new module
Kamil Dudka <kdudka@redhat.com>
parents:
diff changeset
34 } \
39f73ea22045 filevercmp: new module
Kamil Dudka <kdudka@redhat.com>
parents:
diff changeset
35 while (0)
39f73ea22045 filevercmp: new module
Kamil Dudka <kdudka@redhat.com>
parents:
diff changeset
36
39f73ea22045 filevercmp: new module
Kamil Dudka <kdudka@redhat.com>
parents:
diff changeset
37 /* set of well sorted examples */
39f73ea22045 filevercmp: new module
Kamil Dudka <kdudka@redhat.com>
parents:
diff changeset
38 static const char *const examples[] =
39f73ea22045 filevercmp: new module
Kamil Dudka <kdudka@redhat.com>
parents:
diff changeset
39 {
11266
98bcf3f48aa7 filevercmp: Move hidden files up in ordering.
Kamil Dudka <kdudka@redhat.com>
parents: 10573
diff changeset
40 ".",
98bcf3f48aa7 filevercmp: Move hidden files up in ordering.
Kamil Dudka <kdudka@redhat.com>
parents: 10573
diff changeset
41 "..",
98bcf3f48aa7 filevercmp: Move hidden files up in ordering.
Kamil Dudka <kdudka@redhat.com>
parents: 10573
diff changeset
42 ".a~",
98bcf3f48aa7 filevercmp: Move hidden files up in ordering.
Kamil Dudka <kdudka@redhat.com>
parents: 10573
diff changeset
43 ".a",
98bcf3f48aa7 filevercmp: Move hidden files up in ordering.
Kamil Dudka <kdudka@redhat.com>
parents: 10573
diff changeset
44 ".b~",
98bcf3f48aa7 filevercmp: Move hidden files up in ordering.
Kamil Dudka <kdudka@redhat.com>
parents: 10573
diff changeset
45 ".b",
98bcf3f48aa7 filevercmp: Move hidden files up in ordering.
Kamil Dudka <kdudka@redhat.com>
parents: 10573
diff changeset
46 "a~",
98bcf3f48aa7 filevercmp: Move hidden files up in ordering.
Kamil Dudka <kdudka@redhat.com>
parents: 10573
diff changeset
47 "a",
11429
a32a8b26323e filevercmp: handle simple~ and numbered.~3~ backup suffixes
Kamil Dudka <kdudka@redhat.com>
parents: 11266
diff changeset
48 "a.b~",
a32a8b26323e filevercmp: handle simple~ and numbered.~3~ backup suffixes
Kamil Dudka <kdudka@redhat.com>
parents: 11266
diff changeset
49 "a.b",
a32a8b26323e filevercmp: handle simple~ and numbered.~3~ backup suffixes
Kamil Dudka <kdudka@redhat.com>
parents: 11266
diff changeset
50 "a.bc~",
a32a8b26323e filevercmp: handle simple~ and numbered.~3~ backup suffixes
Kamil Dudka <kdudka@redhat.com>
parents: 11266
diff changeset
51 "a.bc",
11266
98bcf3f48aa7 filevercmp: Move hidden files up in ordering.
Kamil Dudka <kdudka@redhat.com>
parents: 10573
diff changeset
52 "b~",
98bcf3f48aa7 filevercmp: Move hidden files up in ordering.
Kamil Dudka <kdudka@redhat.com>
parents: 10573
diff changeset
53 "b",
10573
39f73ea22045 filevercmp: new module
Kamil Dudka <kdudka@redhat.com>
parents:
diff changeset
54 "gcc-c++-10.fc9.tar.gz",
11429
a32a8b26323e filevercmp: handle simple~ and numbered.~3~ backup suffixes
Kamil Dudka <kdudka@redhat.com>
parents: 11266
diff changeset
55 "gcc-c++-10.fc9.tar.gz.~1~",
a32a8b26323e filevercmp: handle simple~ and numbered.~3~ backup suffixes
Kamil Dudka <kdudka@redhat.com>
parents: 11266
diff changeset
56 "gcc-c++-10.fc9.tar.gz.~2~",
10573
39f73ea22045 filevercmp: new module
Kamil Dudka <kdudka@redhat.com>
parents:
diff changeset
57 "gcc-c++-10.8.12-0.7rc2.fc9.tar.bz2",
11429
a32a8b26323e filevercmp: handle simple~ and numbered.~3~ backup suffixes
Kamil Dudka <kdudka@redhat.com>
parents: 11266
diff changeset
58 "gcc-c++-10.8.12-0.7rc2.fc9.tar.bz2.~1~",
10573
39f73ea22045 filevercmp: new module
Kamil Dudka <kdudka@redhat.com>
parents:
diff changeset
59 "glibc-2-0.1.beta1.fc10.rpm",
39f73ea22045 filevercmp: new module
Kamil Dudka <kdudka@redhat.com>
parents:
diff changeset
60 "glibc-common-5-0.2.beta2.fc9.ebuild",
39f73ea22045 filevercmp: new module
Kamil Dudka <kdudka@redhat.com>
parents:
diff changeset
61 "glibc-common-5-0.2b.deb",
39f73ea22045 filevercmp: new module
Kamil Dudka <kdudka@redhat.com>
parents:
diff changeset
62 "glibc-common-11b.ebuild",
39f73ea22045 filevercmp: new module
Kamil Dudka <kdudka@redhat.com>
parents:
diff changeset
63 "glibc-common-11-0.6rc2.ebuild",
39f73ea22045 filevercmp: new module
Kamil Dudka <kdudka@redhat.com>
parents:
diff changeset
64 "libstdc++-0.5.8.11-0.7rc2.fc10.tar.gz",
39f73ea22045 filevercmp: new module
Kamil Dudka <kdudka@redhat.com>
parents:
diff changeset
65 "libstdc++-4a.fc8.tar.gz",
39f73ea22045 filevercmp: new module
Kamil Dudka <kdudka@redhat.com>
parents:
diff changeset
66 "libstdc++-4.10.4.20040204svn.rpm",
39f73ea22045 filevercmp: new module
Kamil Dudka <kdudka@redhat.com>
parents:
diff changeset
67 "libstdc++-devel-3.fc8.ebuild",
39f73ea22045 filevercmp: new module
Kamil Dudka <kdudka@redhat.com>
parents:
diff changeset
68 "libstdc++-devel-3a.fc9.tar.gz",
39f73ea22045 filevercmp: new module
Kamil Dudka <kdudka@redhat.com>
parents:
diff changeset
69 "libstdc++-devel-8.fc8.deb",
39f73ea22045 filevercmp: new module
Kamil Dudka <kdudka@redhat.com>
parents:
diff changeset
70 "libstdc++-devel-8.6.2-0.4b.fc8",
39f73ea22045 filevercmp: new module
Kamil Dudka <kdudka@redhat.com>
parents:
diff changeset
71 "nss_ldap-1-0.2b.fc9.tar.bz2",
39f73ea22045 filevercmp: new module
Kamil Dudka <kdudka@redhat.com>
parents:
diff changeset
72 "nss_ldap-1-0.6rc2.fc8.tar.gz",
39f73ea22045 filevercmp: new module
Kamil Dudka <kdudka@redhat.com>
parents:
diff changeset
73 "nss_ldap-1.0-0.1a.tar.gz",
39f73ea22045 filevercmp: new module
Kamil Dudka <kdudka@redhat.com>
parents:
diff changeset
74 "nss_ldap-10beta1.fc8.tar.gz",
39f73ea22045 filevercmp: new module
Kamil Dudka <kdudka@redhat.com>
parents:
diff changeset
75 "nss_ldap-10.11.8.6.20040204cvs.fc10.ebuild",
39f73ea22045 filevercmp: new module
Kamil Dudka <kdudka@redhat.com>
parents:
diff changeset
76 NULL
39f73ea22045 filevercmp: new module
Kamil Dudka <kdudka@redhat.com>
parents:
diff changeset
77 };
39f73ea22045 filevercmp: new module
Kamil Dudka <kdudka@redhat.com>
parents:
diff changeset
78
39f73ea22045 filevercmp: new module
Kamil Dudka <kdudka@redhat.com>
parents:
diff changeset
79 int
39f73ea22045 filevercmp: new module
Kamil Dudka <kdudka@redhat.com>
parents:
diff changeset
80 main (int argc, char **argv)
39f73ea22045 filevercmp: new module
Kamil Dudka <kdudka@redhat.com>
parents:
diff changeset
81 {
39f73ea22045 filevercmp: new module
Kamil Dudka <kdudka@redhat.com>
parents:
diff changeset
82 const char *const *i;
39f73ea22045 filevercmp: new module
Kamil Dudka <kdudka@redhat.com>
parents:
diff changeset
83
39f73ea22045 filevercmp: new module
Kamil Dudka <kdudka@redhat.com>
parents:
diff changeset
84 /* Following tests taken from test-strverscmp.c */
39f73ea22045 filevercmp: new module
Kamil Dudka <kdudka@redhat.com>
parents:
diff changeset
85 ASSERT (filevercmp ("", "") == 0);
39f73ea22045 filevercmp: new module
Kamil Dudka <kdudka@redhat.com>
parents:
diff changeset
86 ASSERT (filevercmp ("a", "a") == 0);
39f73ea22045 filevercmp: new module
Kamil Dudka <kdudka@redhat.com>
parents:
diff changeset
87 ASSERT (filevercmp ("a", "b") < 0);
39f73ea22045 filevercmp: new module
Kamil Dudka <kdudka@redhat.com>
parents:
diff changeset
88 ASSERT (filevercmp ("b", "a") > 0);
39f73ea22045 filevercmp: new module
Kamil Dudka <kdudka@redhat.com>
parents:
diff changeset
89 ASSERT (filevercmp ("a0", "a") > 0);
39f73ea22045 filevercmp: new module
Kamil Dudka <kdudka@redhat.com>
parents:
diff changeset
90 ASSERT (filevercmp ("00", "01") < 0);
39f73ea22045 filevercmp: new module
Kamil Dudka <kdudka@redhat.com>
parents:
diff changeset
91 ASSERT (filevercmp ("01", "010") < 0);
39f73ea22045 filevercmp: new module
Kamil Dudka <kdudka@redhat.com>
parents:
diff changeset
92 ASSERT (filevercmp ("9", "10") < 0);
39f73ea22045 filevercmp: new module
Kamil Dudka <kdudka@redhat.com>
parents:
diff changeset
93 ASSERT (filevercmp ("0a", "0") > 0);
39f73ea22045 filevercmp: new module
Kamil Dudka <kdudka@redhat.com>
parents:
diff changeset
94
39f73ea22045 filevercmp: new module
Kamil Dudka <kdudka@redhat.com>
parents:
diff changeset
95 /* compare each version string with each other - O(n^2) */
39f73ea22045 filevercmp: new module
Kamil Dudka <kdudka@redhat.com>
parents:
diff changeset
96 for (i = examples; *i; i++)
39f73ea22045 filevercmp: new module
Kamil Dudka <kdudka@redhat.com>
parents:
diff changeset
97 {
39f73ea22045 filevercmp: new module
Kamil Dudka <kdudka@redhat.com>
parents:
diff changeset
98 const char *const *j;
39f73ea22045 filevercmp: new module
Kamil Dudka <kdudka@redhat.com>
parents:
diff changeset
99 for (j = examples; *j; j++)
39f73ea22045 filevercmp: new module
Kamil Dudka <kdudka@redhat.com>
parents:
diff changeset
100 {
39f73ea22045 filevercmp: new module
Kamil Dudka <kdudka@redhat.com>
parents:
diff changeset
101 int result = filevercmp (*i, *j);
39f73ea22045 filevercmp: new module
Kamil Dudka <kdudka@redhat.com>
parents:
diff changeset
102 if (result < 0)
39f73ea22045 filevercmp: new module
Kamil Dudka <kdudka@redhat.com>
parents:
diff changeset
103 ASSERT (i < j);
39f73ea22045 filevercmp: new module
Kamil Dudka <kdudka@redhat.com>
parents:
diff changeset
104 else if (0 < result)
39f73ea22045 filevercmp: new module
Kamil Dudka <kdudka@redhat.com>
parents:
diff changeset
105 ASSERT (j < i);
39f73ea22045 filevercmp: new module
Kamil Dudka <kdudka@redhat.com>
parents:
diff changeset
106 else
39f73ea22045 filevercmp: new module
Kamil Dudka <kdudka@redhat.com>
parents:
diff changeset
107 ASSERT (i == j);
39f73ea22045 filevercmp: new module
Kamil Dudka <kdudka@redhat.com>
parents:
diff changeset
108 }
39f73ea22045 filevercmp: new module
Kamil Dudka <kdudka@redhat.com>
parents:
diff changeset
109 }
39f73ea22045 filevercmp: new module
Kamil Dudka <kdudka@redhat.com>
parents:
diff changeset
110
39f73ea22045 filevercmp: new module
Kamil Dudka <kdudka@redhat.com>
parents:
diff changeset
111 return 0;
39f73ea22045 filevercmp: new module
Kamil Dudka <kdudka@redhat.com>
parents:
diff changeset
112 }