msm: consistency for equally ranked keys
[platform/upstream/rpm.git] / tests / rpmdepmatch.at
1
2 AT_BANNER([RPM dependency matching])
3
4 RPMPY_TEST([provide - require pairs],[
5 # ((provides), (requires), match) expected values
6 tests = [
7     # Different names never match
8     (('b',),                    ('a',),                 0),
9     (('b',),                    ('a', '=', '1.2'),      0),
10     (('b',),                    ('a', '>=', '1.2'),     0),
11     (('b',),                    ('a', '<=', '1.2'),     0),
12     (('b',),                    ('a', '<', '1.2'),      0),
13     (('b',),                    ('a', '>', '1.2'),      0),
14     (('b',),                    ('a', '<>', '1.2'),     0),
15
16     # Unversioned provide matches all versions
17     (('a',),                    ('a',),                 1),
18     (('a',),                    ('a', '=', '1.2'),      1),
19     (('a',),                    ('a', '>=', '1.2'),     1),
20     (('a',),                    ('a', '<=', '1.2'),     1),
21     (('a',),                    ('a', '<', '1.2'),      1),
22     (('a',),                    ('a', '>', '1.2'),      1),
23     (('a',),                    ('a', '<>', '1.2'),     1),
24
25     # Unversioned require matches all versions
26     (('a', '=', '1.2'),         ('a',),                 1),
27     (('a', '<', '1.2'),         ('a',),                 1),
28     (('a', '>', '1.2'),         ('a',),                 1),
29     (('a', '<=', '1.2'),        ('a',),                 1),
30     (('a', '>=', '1.2'),        ('a',),                 1),
31     (('a', '<>', '1.2'),        ('a',),                 1),
32
33     # Simple, obvious version comparisons
34     (('a', '=', '1.2'),         ('a', '=', '1.2'),      1),
35     (('a', '=', '1.2'),         ('a', '>=', '1.2'),     1),
36     (('a', '=', '1.2'),         ('a', '<=', '1.2'),     1),
37     (('a', '=', '1.2'),         ('a', '<', '1.2'),      0),
38     (('a', '=', '1.2'),         ('a', '>', '1.2'),      0),
39     (('a', '=', '1.2'),         ('a', '<>', '1.2'),     0),
40
41     (('a', '=', '1.2'),         ('a', '=', '1.3'),      0),
42     (('a', '=', '1.2'),         ('a', '>=', '1.3'),     0),
43     (('a', '=', '1.2'),         ('a', '<=', '1.3'),     1),
44     (('a', '=', '1.2'),         ('a', '<', '1.3'),      1),
45     (('a', '=', '1.2'),         ('a', '>', '1.3'),      0),
46     (('a', '=', '1.2'),         ('a', '<>', '1.3'),     1),
47  
48     # Simple, obvious version-release comparisons
49     (('a', '=', '1.2-1'),       ('a', '=', '1.2-1'),    1),
50     (('a', '=', '1.2-1'),       ('a', '>=', '1.2-1'),   1),
51     (('a', '=', '1.2-1'),       ('a', '<=', '1.2-1'),   1),
52     (('a', '=', '1.2-1'),       ('a', '<', '1.2-1'),    0),
53     (('a', '=', '1.2-1'),       ('a', '>', '1.2-1'),    0),
54     (('a', '=', '1.2-1'),       ('a', '<>', '1.2-1'),   0),
55
56     (('a', '=', '1.2-1'),       ('a', '=', '1.2-2'),    0),
57     (('a', '=', '1.2-1'),       ('a', '>=', '1.2-2'),   0),
58     (('a', '=', '1.2-1'),       ('a', '<=', '1.2-2'),   1),
59     (('a', '=', '1.2-1'),       ('a', '<', '1.2-2'),    1),
60     (('a', '=', '1.2-1'),       ('a', '>', '1.2-2'),    0),
61     (('a', '=', '1.2-1'),       ('a', '<>', '1.2-2'),   1),
62
63     (('a', '=', '1.3-1'),       ('a', '=', '1.2-2'),    0),
64     (('a', '=', '1.3-1'),       ('a', '>=', '1.2-2'),   1),
65     (('a', '=', '1.3-1'),       ('a', '<=', '1.2-2'),   0),
66     (('a', '=', '1.3-1'),       ('a', '<', '1.2-2'),    0),
67     (('a', '=', '1.3-1'),       ('a', '>', '1.2-2'),    1),
68     (('a', '=', '1.3-1'),       ('a', '<>', '1.2-2'),   1),
69
70     # Zero epoch is same as no epoch
71     (('a', '=', '0:1.2'),       ('a', '=', '1.2'),      1),
72     (('a', '=', '0:1.2'),       ('a', '>=', '1.2'),     1),
73     (('a', '=', '0:1.2'),       ('a', '<=', '1.2'),     1),
74     (('a', '=', '0:1.2'),       ('a', '<', '1.2'),      0),
75     (('a', '=', '0:1.2'),       ('a', '>', '1.2'),      0),
76     (('a', '=', '0:1.2'),       ('a', '<>', '1.2'),     0),
77
78     (('a', '=', '1.2'),         ('a', '=', '0:1.2'),    1),
79     (('a', '=', '1.2'),         ('a', '>=', '0:1.2'),   1),
80     (('a', '=', '1.2'),         ('a', '<=', '0:1.2'),   1),
81     (('a', '=', '1.2'),         ('a', '<', '0:1.2'),    0),
82     (('a', '=', '1.2'),         ('a', '>', '0:1.2'),    0),
83     (('a', '=', '1.2'),         ('a', '<>', '0:1.2'),   0),
84
85     # Non-zero epochs
86     (('a', '=', '1:1.2'),       ('a', '=', '1.2'),      0),
87     (('a', '=', '1:1.2'),       ('a', '>=', '1.2'),     1),
88     (('a', '=', '1:1.2'),       ('a', '<=', '1.2'),     0),
89     (('a', '=', '1:1.2'),       ('a', '<', '1.2'),      0),
90     (('a', '=', '1:1.2'),       ('a', '>', '1.2'),      1),
91     (('a', '=', '1:1.2'),       ('a', '<>', '1.2'),     1),
92
93     (('a', '=', '1.2'),         ('a', '=', '1:1.2'),    0),
94     (('a', '=', '1.2'),         ('a', '>=', '1:1.2'),   0),
95     (('a', '=', '1.2'),         ('a', '<=', '1:1.2'),   1),
96     (('a', '=', '1.2'),         ('a', '<', '1:1.2'),    1),
97     (('a', '=', '1.2'),         ('a', '>', '1:1.2'),    0),
98     (('a', '=', '1.2'),         ('a', '<>', '1:1.2'),   1),
99
100     (('a', '=', '2:1.2'),       ('a', '=', '2:1.2'),    1),
101     (('a', '=', '2:1.2'),       ('a', '>=', '2:1.2'),   1),
102     (('a', '=', '2:1.2'),       ('a', '<=', '2:1.2'),   1),
103     (('a', '=', '2:1.2'),       ('a', '<', '2:1.2'),    0),
104     (('a', '=', '2:1.2'),       ('a', '>', '2:1.2'),    0),
105     (('a', '=', '2:1.2'),       ('a', '<>', '2:1.2'),   0),
106
107     # Simple, obvious version comparisons with provide ranges
108     (('a', '>', '1.2'),         ('a', '=', '1.2'),      0),
109     (('a', '>', '1.2'),         ('a', '>=', '1.2'),     1),
110     (('a', '>', '1.2'),         ('a', '<=', '1.2'),     0),
111     (('a', '>', '1.2'),         ('a', '<', '1.2'),      0),
112     (('a', '>', '1.2'),         ('a', '>', '1.2'),      1),
113     (('a', '>', '1.2'),         ('a', '<>', '1.2'),     1),
114
115     (('a', '<', '1.2'),         ('a', '=', '1.2'),      0),
116     (('a', '<', '1.2'),         ('a', '>=', '1.2'),     0),
117     (('a', '<', '1.2'),         ('a', '<=', '1.2'),     1),
118     (('a', '<', '1.2'),         ('a', '<', '1.2'),      1),
119     (('a', '<', '1.2'),         ('a', '>', '1.2'),      0),
120     (('a', '<', '1.2'),         ('a', '<>', '1.2'),     1),
121
122     (('a', '>=', '1.2'),        ('a', '=', '1.2'),      1),
123     (('a', '>=', '1.2'),        ('a', '>=', '1.2'),     1),
124     (('a', '>=', '1.2'),        ('a', '<=', '1.2'),     1),
125     (('a', '>=', '1.2'),        ('a', '<', '1.2'),      0),
126     (('a', '>=', '1.2'),        ('a', '>', '1.2'),      1),
127     (('a', '>=', '1.2'),        ('a', '<>', '1.2'),     1),
128
129     (('a', '<=', '1.2'),        ('a', '=', '1.2'),      1),
130     (('a', '<=', '1.2'),        ('a', '>=', '1.2'),     1),
131     (('a', '<=', '1.2'),        ('a', '<=', '1.2'),     1),
132     (('a', '<=', '1.2'),        ('a', '<', '1.2'),      1),
133     (('a', '<=', '1.2'),        ('a', '>', '1.2'),      0),
134     (('a', '<=', '1.2'),        ('a', '<>', '1.2'),     1),
135
136     (('a', '<>', '1.2'),        ('a', '=', '1.2'),      0),
137     (('a', '<>', '1.2'),        ('a', '>=', '1.2'),     1),
138     (('a', '<>', '1.2'),        ('a', '<=', '1.2'),     1),
139     (('a', '<>', '1.2'),        ('a', '<', '1.2'),      1),
140     (('a', '<>', '1.2'),        ('a', '>', '1.2'),      1),
141     (('a', '<>', '1.2'),        ('a', '<>', '1.2'),     1),
142
143     # Missing release should be considered "any release will do"
144     # but this is not always so (the cases with "???") 
145     (('a', '=', '1.2-1'),       ('a', '=', '1.2'),      1),
146     (('a', '=', '1.2-1'),       ('a', '>=', '1.2'),     1),
147     (('a', '=', '1.2-1'),       ('a', '<=', '1.2'),     1),
148     (('a', '=', '1.2-1'),       ('a', '<', '1.2'),      0),
149     (('a', '=', '1.2-1'),       ('a', '>', '1.2'),      0),
150     (('a', '=', '1.2-1'),       ('a', '<>', '1.2'),     0),
151
152     (('a', '>', '1.2-1'),       ('a', '=', '1.2'),      1),
153     (('a', '>', '1.2-1'),       ('a', '>=', '1.2'),     1),
154     (('a', '>', '1.2-1'),       ('a', '<=', '1.2'),     1),
155     (('a', '>', '1.2-1'),       ('a', '<', '1.2'),      0),
156     (('a', '>', '1.2-1'),       ('a', '>', '1.2'),      1),
157     (('a', '>', '1.2-1'),       ('a', '<>', '1.2'),     1),
158
159     (('a', '<', '1.2-1'),       ('a', '=', '1.2'),      1),
160     (('a', '<', '1.2-1'),       ('a', '>=', '1.2'),     1),
161     (('a', '<', '1.2-1'),       ('a', '<=', '1.2'),     1),
162     (('a', '<', '1.2-1'),       ('a', '<', '1.2'),      1),
163     (('a', '<', '1.2-1'),       ('a', '>', '1.2'),      0),
164     (('a', '<', '1.2-1'),       ('a', '<>', '1.2'),     1),
165
166     (('a', '>=', '1.2-1'),      ('a', '=', '1.2'),      1),
167     (('a', '>=', '1.2-1'),      ('a', '>=', '1.2'),     1),
168     (('a', '>=', '1.2-1'),      ('a', '<=', '1.2'),     1),
169     (('a', '>=', '1.2-1'),      ('a', '<', '1.2'),      0),
170     (('a', '>=', '1.2-1'),      ('a', '>', '1.2'),      1),
171     (('a', '>=', '1.2-1'),      ('a', '<>', '1.2'),     1),
172
173     (('a', '<=', '1.2-1'),      ('a', '=', '1.2'),      1),
174     (('a', '<=', '1.2-1'),      ('a', '>=', '1.2'),     1),
175     (('a', '<=', '1.2-1'),      ('a', '<=', '1.2'),     1),
176     (('a', '<=', '1.2-1'),      ('a', '<', '1.2'),      1),
177     (('a', '<=', '1.2-1'),      ('a', '>', '1.2'),      0),
178     (('a', '<=', '1.2-1'),      ('a', '<>', '1.2'),     1),
179
180     (('a', '<>', '1.2-1'),      ('a', '=', '1.2'),      1),
181     (('a', '<>', '1.2-1'),      ('a', '>=', '1.2'),     1),
182     (('a', '<>', '1.2-1'),      ('a', '<=', '1.2'),     1),
183     (('a', '<>', '1.2-1'),      ('a', '<', '1.2'),      1),
184     (('a', '<>', '1.2-1'),      ('a', '>', '1.2'),      1),
185     (('a', '<>', '1.2-1'),      ('a', '<>', '1.2'),     1),
186
187     (('a', '=', '1.2'),         ('a', '=', '1.2-1'),    1),
188     (('a', '=', '1.2'),         ('a', '>=', '1.2-1'),   1),
189     (('a', '=', '1.2'),         ('a', '<=', '1.2-1'),   1),
190     (('a', '=', '1.2'),         ('a', '<', '1.2-1'),    1),
191     (('a', '=', '1.2'),         ('a', '>', '1.2-1'),    1),
192     (('a', '=', '1.2'),         ('a', '<>', '1.2-1'),   1),
193
194     (('a', '>', '1.2'),         ('a', '=', '1.2-1'),    0),
195     (('a', '>', '1.2'),         ('a', '>=', '1.2-1'),   1),
196     (('a', '>', '1.2'),         ('a', '<=', '1.2-1'),   0),
197     (('a', '>', '1.2'),         ('a', '<', '1.2-1'),    0),
198     (('a', '>', '1.2'),         ('a', '>', '1.2-1'),    1),
199     (('a', '>', '1.2'),         ('a', '<>', '1.2-1'),   1),
200
201     (('a', '<', '1.2'),         ('a', '=', '1.2-1'),    0),
202     (('a', '<', '1.2'),         ('a', '>=', '1.2-1'),   0),
203     (('a', '<', '1.2'),         ('a', '<=', '1.2-1'),   1),
204     (('a', '<', '1.2'),         ('a', '<', '1.2-1'),    1),
205     (('a', '<', '1.2'),         ('a', '>', '1.2-1'),    0),
206     (('a', '<', '1.2'),         ('a', '<>', '1.2-1'),   1),
207
208     (('a', '>=', '1.2'),        ('a', '=', '1.2-1'),    1),
209     (('a', '>=', '1.2'),        ('a', '>=', '1.2-1'),   1),
210     (('a', '>=', '1.2'),        ('a', '<=', '1.2-1'),   1),
211     (('a', '>=', '1.2'),        ('a', '<', '1.2-1'),    1),
212     (('a', '>=', '1.2'),        ('a', '>', '1.2-1'),    1),
213     (('a', '>=', '1.2'),        ('a', '<>', '1.2-1'),   1),
214
215     (('a', '<=', '1.2'),        ('a', '=', '1.2-1'),    1),
216     (('a', '<=', '1.2'),        ('a', '>=', '1.2-1'),   1),
217     (('a', '<=', '1.2'),        ('a', '<=', '1.2-1'),   1),
218     (('a', '<=', '1.2'),        ('a', '<', '1.2-1'),    1),
219     (('a', '<=', '1.2'),        ('a', '>', '1.2-1'),    1),
220     (('a', '<=', '1.2'),        ('a', '<>', '1.2-1'),   1),
221
222     (('a', '<>', '1.2'),        ('a', '=', '1.2-1'),    0),
223     (('a', '<>', '1.2'),        ('a', '>=', '1.2-1'),   1),
224     (('a', '<>', '1.2'),        ('a', '<=', '1.2-1'),   1),
225     (('a', '<>', '1.2'),        ('a', '<', '1.2-1'),    1),
226     (('a', '<>', '1.2'),        ('a', '>', '1.2-1'),    1),
227     (('a', '<>', '1.2'),        ('a', '<>', '1.2-1'),   1),
228 ]
229
230 ms = ['no match', 'match']
231
232 myprint() # dumb kludge to fixup expected output
233 for p, r, res in tests:
234     d1 = rpm.ds(p, 'provides')
235     d2 = rpm.ds(r, 'requires')
236     match = d1.Compare(d2)
237     if match != res:
238         myprint('FAILED: %s with %s: %s' % (d1.DNEVR(), d2.DNEVR(),ms[res]))
239 ],
240 []
241 )