@@ -241,3 +241,148 @@ func TestDeriveNext(t *testing.T) {
241241 })
242242 }
243243}
244+
245+ func TestCompare (t * testing.T ) {
246+ for _ , test := range []struct {
247+ name string
248+ versionA string
249+ versionB string
250+ want int
251+ }{
252+ {
253+ name : "equal" ,
254+ versionA : "1.2.3" ,
255+ versionB : "1.2.3" ,
256+ want : 0 ,
257+ },
258+ {
259+ name : "equal with pre-release" ,
260+ versionA : "1.2.3-alpha" ,
261+ versionB : "1.2.3-alpha" ,
262+ want : 0 ,
263+ },
264+ {
265+ name : "equal with pre-release and number" ,
266+ versionA : "1.2.3-alpha4" ,
267+ versionB : "1.2.3-alpha4" ,
268+ want : 0 ,
269+ },
270+ {
271+ name : "equal with pre-release and number, different separator" ,
272+ versionA : "1.2.3-alpha4" ,
273+ versionB : "1.2.3-alpha.4" ,
274+ want : 0 ,
275+ },
276+ {
277+ name : "less than patch" ,
278+ versionA : "1.2.3" ,
279+ versionB : "1.2.4" ,
280+ want : - 1 ,
281+ },
282+ {
283+ name : "less than minor" ,
284+ versionA : "1.2.3" ,
285+ versionB : "1.3.0" ,
286+ want : - 1 ,
287+ },
288+ {
289+ name : "less than major" ,
290+ versionA : "1.2.3" ,
291+ versionB : "2.0.0" ,
292+ want : - 1 ,
293+ },
294+ {
295+ name : "less than prerelease" ,
296+ versionA : "1.2.3-alpha" ,
297+ versionB : "1.2.3-beta" ,
298+ want : - 1 ,
299+ },
300+ {
301+ name : "less than prerelease number" ,
302+ versionA : "1.2.3-alpha1" ,
303+ versionB : "1.2.3-alpha2" ,
304+ want : - 1 ,
305+ },
306+ {
307+ name : "less than prerelease number with separator" ,
308+ versionA : "1.2.3-alpha.1" ,
309+ versionB : "1.2.3-alpha.2" ,
310+ want : - 1 ,
311+ },
312+ {
313+ name : "less than prerelease against stable" ,
314+ versionA : "1.2.3-alpha1" ,
315+ versionB : "1.2.3" ,
316+ want : - 1 ,
317+ },
318+ {
319+ name : "less than prerelease without number" ,
320+ versionA : "1.2.3-alpha" ,
321+ versionB : "1.2.3-alpha1" ,
322+ want : - 1 ,
323+ },
324+ {
325+ name : "greater than patch" ,
326+ versionA : "1.2.4" ,
327+ versionB : "1.2.3" ,
328+ want : 1 ,
329+ },
330+ {
331+ name : "greater than minor" ,
332+ versionA : "1.3.0" ,
333+ versionB : "1.2.3" ,
334+ want : 1 ,
335+ },
336+ {
337+ name : "greater than major" ,
338+ versionA : "2.0.0" ,
339+ versionB : "1.2.3" ,
340+ want : 1 ,
341+ },
342+ {
343+ name : "greater than prerelease" ,
344+ versionA : "1.2.3-beta" ,
345+ versionB : "1.2.3-alpha" ,
346+ want : 1 ,
347+ },
348+ {
349+ name : "greater than prerelease number" ,
350+ versionA : "1.2.3-alpha2" ,
351+ versionB : "1.2.3-alpha1" ,
352+ want : 1 ,
353+ },
354+ {
355+ name : "greater than prerelease number with separator" ,
356+ versionA : "1.2.3-alpha.2" ,
357+ versionB : "1.2.3-alpha.1" ,
358+ want : 1 ,
359+ },
360+ {
361+ name : "greater than prerelease against stable" ,
362+ versionA : "1.2.3" ,
363+ versionB : "1.2.3-alpha1" ,
364+ want : 1 ,
365+ },
366+ {
367+ name : "greater than prerelease without number" ,
368+ versionA : "1.2.3-alpha1" ,
369+ versionB : "1.2.3-alpha" ,
370+ want : 1 ,
371+ },
372+ } {
373+ t .Run (test .name , func (t * testing.T ) {
374+ a , err := Parse (test .versionA )
375+ if err != nil {
376+ t .Fatalf ("Parse() returned an error: %v" , err )
377+ }
378+ b , err := Parse (test .versionB )
379+ if err != nil {
380+ t .Fatalf ("Parse() returned an error: %v" , err )
381+ }
382+ got := a .Compare (b )
383+ if diff := cmp .Diff (test .want , got ); diff != "" {
384+ t .Errorf ("TestCompare() returned diff (-want +got):\n %s" , diff )
385+ }
386+ })
387+ }
388+ }
0 commit comments