@@ -435,223 +435,93 @@ func TestExtractSnapshotFromVersionString(t *testing.T) {
435435 }
436436}
437437
438- func TestLess (t * testing.T ) {
438+ func TestComparisons (t * testing.T ) {
439439 testcases := []struct {
440440 name string
441441 leftVersion string
442442 rightVersion string
443- less bool
444- }{
445- // major, minor, patch section
446- {
447- name : "major version less than ours" ,
448- leftVersion : "7.17.10" ,
449- rightVersion : "8.9.0" ,
450- less : true ,
451- },
452- {
453- name : "minor version less than ours" ,
454- leftVersion : "8.6.2" ,
455- rightVersion : "8.9.0" ,
456- less : true ,
457- },
458- {
459- name : "patch version less than ours" ,
460- leftVersion : "8.7.0" ,
461- rightVersion : "8.7.1" ,
462- less : true ,
463- },
464- // prerelease section
465- {
466- name : "prerelease is always less than non-prerelease" ,
467- leftVersion : "8.9.0-SNAPSHOT" ,
468- rightVersion : "8.9.0" ,
469- less : true ,
470- },
471- {
472- name : "2 prereleases are compared by their tokens" ,
473- leftVersion : "8.9.0-SNAPSHOT" ,
474- rightVersion : "8.9.0-er1" ,
475- less : false ,
476- },
477- {
478- name : "2 prereleases are compared by their tokens, reversed" ,
479- leftVersion : "8.9.0-er1" ,
480- rightVersion : "8.9.0-SNAPSHOT" ,
481- less : true ,
482- },
483- {
484- name : "2 prereleases have no specific order" ,
485- leftVersion : "8.9.0-SNAPSHOT" ,
486- rightVersion : "8.9.0-er1" ,
487- less : false ,
488- },
489- // build metadata (these have no impact on precedence)
490- {
491- name : "build metadata have no influence on precedence" ,
492- leftVersion : "8.9.0-SNAPSHOT+aaaaaa" ,
493- rightVersion : "8.9.0-SNAPSHOT+bbbbbb" ,
494- less : false ,
495- },
496- {
497- name : "build metadata have no influence on precedence, reversed" ,
498- leftVersion : "8.9.0-SNAPSHOT+bbbbbb" ,
499- rightVersion : "8.9.0-SNAPSHOT+aaaaaa" ,
500- less : false ,
501- },
502- // testcases taken from semver.org
503- // 1.0.0-alpha < 1.0.0-alpha.1 < 1.0.0-alpha.beta < 1.0.0-beta < 1.0.0-beta.2 < 1.0.0-beta.11 < 1.0.0-rc.1 < 1.0.0.
504- {
505- name : "prerelease with fewer tokens is less than same prerelease with extra tokens" ,
506- leftVersion : "1.0.0-alpha" ,
507- rightVersion : "1.0.0-alpha.1" ,
508- less : true ,
509- },
510- {
511- name : "numeric identifiers always have lower precedence than non-numeric identifiers" ,
512- leftVersion : "1.0.0-alpha.1" ,
513- rightVersion : "1.0.0-alpha.beta" ,
514- less : true ,
515- },
516- {
517- name : "minimum number of prerelease string tokens must be compared alphabetically" ,
518- leftVersion : "1.0.0-alpha.beta" ,
519- rightVersion : "1.0.0-beta" ,
520- less : true ,
521- },
522- {
523- name : "prerelease with fewer tokens is less than same prerelease with extra tokens #2" ,
524- leftVersion : "1.0.0-beta" ,
525- rightVersion : "1.0.0-beta.2" ,
526- less : true ,
527- },
528- {
529- name : "numeric identifiers must be compared numerically" ,
530- leftVersion : "1.0.0-beta.2" ,
531- rightVersion : "1.0.0-beta.11" ,
532- less : true ,
533- },
534- {
535- name : "string identifiers are compared lexically" ,
536- leftVersion : "1.0.0-beta.11" ,
537- rightVersion : "1.0.0-rc.1" ,
538- less : true ,
539- },
540- {
541- name : "prerelease versions have lower precedence than non-prerelease version " ,
542- leftVersion : "1.0.0-rc.1" ,
543- rightVersion : "1.0.0" ,
544- less : true ,
545- },
546-
547- // independent section
548- {
549- name : "independent release is always more than regular" ,
550- leftVersion : "8.9.0+build202405061022" ,
551- rightVersion : "8.9.0" ,
552- less : false ,
553- },
554- {
555- name : "prerelease is less than independent release" ,
556- leftVersion : "8.9.0-SNAPSHOT" ,
557- rightVersion : "8.9.0+build202405061022" ,
558- less : true ,
559- },
560- {
561- name : "older release is less" ,
562- leftVersion : "8.9.0+build202305061022" ,
563- rightVersion : "8.9.0+build202405061022" ,
564- less : true ,
565- },
566- {
567- name : "older release is less - reversed" ,
568- leftVersion : "8.9.0+build202405061022" ,
569- rightVersion : "8.9.0+build202305061022" ,
570- less : false ,
571- },
572- }
573-
574- for _ , tc := range testcases {
575- t .Run (tc .name , func (t * testing.T ) {
576- left , err := ParseVersion (tc .leftVersion )
577- require .NoError (t , err )
578- require .NotNil (t , left )
579- right , err := ParseVersion (tc .rightVersion )
580- require .NoError (t , err )
581- require .NotNil (t , right )
582- assert .Equalf (t , tc .less , left .Less (* right ), "Expected %s < %s = %v" , tc .leftVersion , tc .rightVersion , tc .less )
583- })
584- }
585- }
586443
587- func TestEqual (t * testing.T ) {
588- testcases := []struct {
589- name string
590- leftVersion string
591- rightVersion string
592- equal bool
444+ less bool
445+ equal bool
593446 }{
594447 // major, minor, patch section
595448 {
596449 name : "major, minor, patch are all equal" ,
597450 leftVersion : "7.17.10" ,
598451 rightVersion : "7.17.10" ,
452+ less : false ,
599453 equal : true ,
600454 },
601455 {
602456 name : "major version less than ours" ,
603457 leftVersion : "7.17.10" ,
604458 rightVersion : "8.9.0" ,
459+ less : true ,
605460 equal : false ,
606461 },
607462 {
608463 name : "minor version less than ours" ,
609464 leftVersion : "8.6.2" ,
610465 rightVersion : "8.9.0" ,
466+ less : true ,
611467 equal : false ,
612468 },
613469 {
614470 name : "patch version less than ours" ,
615471 leftVersion : "8.7.0" ,
616472 rightVersion : "8.7.1" ,
473+ less : true ,
617474 equal : false ,
618475 },
619476 // prerelease section
620477 {
621478 name : "major, minor, patch, prerelease are all equal" ,
622479 leftVersion : "8.9.0-SNAPSHOT" ,
623480 rightVersion : "8.9.0-SNAPSHOT" ,
481+ less : false ,
624482 equal : true ,
625483 },
626484 {
627485 name : "prerelease is always less than non-prerelease" ,
628486 leftVersion : "8.9.0-SNAPSHOT" ,
629487 rightVersion : "8.9.0" ,
488+ less : true ,
630489 equal : false ,
631490 },
632491 {
633492 name : "2 prereleases are compared by their tokens" ,
634493 leftVersion : "8.9.0-SNAPSHOT" ,
635494 rightVersion : "8.9.0-er1" ,
495+ less : false ,
636496 equal : false ,
637497 },
638498 {
639499 name : "2 prereleases are compared by their tokens, reversed" ,
640500 leftVersion : "8.9.0-er1" ,
641501 rightVersion : "8.9.0-SNAPSHOT" ,
502+ less : true ,
503+ equal : false ,
504+ },
505+ {
506+ name : "2 prereleases have no specific order" ,
507+ leftVersion : "8.9.0-SNAPSHOT" ,
508+ rightVersion : "8.9.0-er1" ,
509+ less : false ,
642510 equal : false ,
643511 },
644512 // build metadata (these have no impact on precedence)
645513 {
646514 name : "build metadata have no influence on precedence" ,
647515 leftVersion : "8.9.0-SNAPSHOT+aaaaaa" ,
648516 rightVersion : "8.9.0-SNAPSHOT+bbbbbb" ,
517+ less : false ,
649518 equal : true ,
650519 },
651520 {
652521 name : "build metadata have no influence on precedence, reversed" ,
653522 leftVersion : "8.9.0-SNAPSHOT+bbbbbb" ,
654523 rightVersion : "8.9.0-SNAPSHOT+aaaaaa" ,
524+ less : false ,
655525 equal : true ,
656526 },
657527 // testcases taken from semver.org
@@ -660,42 +530,49 @@ func TestEqual(t *testing.T) {
660530 name : "prerelease with fewer tokens is less than same prerelease with extra tokens" ,
661531 leftVersion : "1.0.0-alpha" ,
662532 rightVersion : "1.0.0-alpha.1" ,
533+ less : true ,
663534 equal : false ,
664535 },
665536 {
666537 name : "numeric identifiers always have lower precedence than non-numeric identifiers" ,
667538 leftVersion : "1.0.0-alpha.1" ,
668539 rightVersion : "1.0.0-alpha.beta" ,
540+ less : true ,
669541 equal : false ,
670542 },
671543 {
672544 name : "minimum number of prerelease string tokens must be compared alphabetically" ,
673545 leftVersion : "1.0.0-alpha.beta" ,
674546 rightVersion : "1.0.0-beta" ,
547+ less : true ,
675548 equal : false ,
676549 },
677550 {
678551 name : "prerelease with fewer tokens is less than same prerelease with extra tokens #2" ,
679552 leftVersion : "1.0.0-beta" ,
680553 rightVersion : "1.0.0-beta.2" ,
554+ less : true ,
681555 equal : false ,
682556 },
683557 {
684558 name : "numeric identifiers must be compared numerically" ,
685559 leftVersion : "1.0.0-beta.2" ,
686560 rightVersion : "1.0.0-beta.11" ,
561+ less : true ,
687562 equal : false ,
688563 },
689564 {
690565 name : "string identifiers are compared lexically" ,
691566 leftVersion : "1.0.0-beta.11" ,
692567 rightVersion : "1.0.0-rc.1" ,
568+ less : true ,
693569 equal : false ,
694570 },
695571 {
696572 name : "prerelease versions have lower precedence than non-prerelease version " ,
697573 leftVersion : "1.0.0-rc.1" ,
698574 rightVersion : "1.0.0" ,
575+ less : true ,
699576 equal : false ,
700577 },
701578
@@ -705,29 +582,34 @@ func TestEqual(t *testing.T) {
705582 leftVersion : "8.9.0+build202405061022" ,
706583 rightVersion : "8.9.0+build202405061022" ,
707584 equal : true ,
585+ less : false ,
708586 },
709587 {
710588 name : "independent release is always more than regular" ,
711589 leftVersion : "8.9.0+build202405061022" ,
712590 rightVersion : "8.9.0" ,
591+ less : false ,
713592 equal : false ,
714593 },
715594 {
716595 name : "prerelease is less than independent release" ,
717596 leftVersion : "8.9.0-SNAPSHOT" ,
718597 rightVersion : "8.9.0+build202405061022" ,
598+ less : true ,
719599 equal : false ,
720600 },
721601 {
722602 name : "older release is less" ,
723603 leftVersion : "8.9.0+build202305061022" ,
724604 rightVersion : "8.9.0+build202405061022" ,
605+ less : true ,
725606 equal : false ,
726607 },
727608 {
728609 name : "older release is less - reversed" ,
729610 leftVersion : "8.9.0+build202405061022" ,
730611 rightVersion : "8.9.0+build202305061022" ,
612+ less : false ,
731613 equal : false ,
732614 },
733615 }
@@ -740,6 +622,7 @@ func TestEqual(t *testing.T) {
740622 right , err := ParseVersion (tc .rightVersion )
741623 require .NoError (t , err )
742624 require .NotNil (t , right )
625+ assert .Equalf (t , tc .less , left .Less (* right ), "Expected %s < %s = %v" , tc .leftVersion , tc .rightVersion , tc .less )
743626 assert .Equalf (t , tc .equal , left .Equal (* right ), "Expected %s == %s = %v" , tc .leftVersion , tc .rightVersion , tc .equal )
744627 })
745628 }
0 commit comments