import Base import ./lib.bend as S # Concrete parse/show roundtrips for representative versions. law parse_roundtrip_zero: { S.Semver.parse(S.Semver.show(S.Semver{0, 0, 0})) == Some{S.Semver{0, 0, 0}} : Maybe<&2, S.Semver> } law parse_roundtrip_small: { S.Semver.parse(S.Semver.show(S.Semver{1, 2, 3})) == Some{S.Semver{1, 2, 3}} : Maybe<&2, S.Semver> } law parse_roundtrip_large: { S.Semver.parse(S.Semver.show(S.Semver{4294967295, 17, 0})) == Some{S.Semver{4294967295, 17, 0}} : Maybe<&2, S.Semver> } law parse_literal: { S.Semver.parse("12.34.56") == Some{S.Semver{12, 34, 56}} : Maybe<&2, S.Semver> } law parse_reject_missing_component: { S.Semver.parse("1.2") == None{} : Maybe<&2, S.Semver> } law parse_reject_metadata: { S.Semver.parse("1.2.3-alpha") == None{} : Maybe<&2, S.Semver> } law parse_reject_extra_component: { S.Semver.parse("1.2.3.4") == None{} : Maybe<&2, S.Semver> } # Numeric precedence cases: major, minor, patch, and equality. law cmp_major_lt: { S.Semver.cmp(S.Semver{1, 0, 0}, S.Semver{2, 0, 0}) == LT{} : Cmp } law cmp_minor_lt: { S.Semver.cmp(S.Semver{1, 1, 9}, S.Semver{1, 2, 0}) == LT{} : Cmp } law cmp_patch_lt: { S.Semver.cmp(S.Semver{1, 2, 3}, S.Semver{1, 2, 4}) == LT{} : Cmp } law cmp_eq: { S.Semver.cmp(S.Semver{7, 8, 9}, S.Semver{7, 8, 9}) == EQ{} : Cmp } law cmp_gt: { S.Semver.cmp(S.Semver{2, 0, 0}, S.Semver{1, 99, 99}) == GT{} : Cmp } law precedes_true: { S.Semver.precedes(S.Semver{1, 2, 3}, S.Semver{1, 2, 4}) == True{} : Bool } law precedes_false_on_equal: { S.Semver.precedes(S.Semver{1, 2, 3}, S.Semver{1, 2, 3}) == False{} : Bool }