github.com/go-asm/go@v1.21.1-0.20240213172139-40c5ead50c48/cmd/go/gover/gover_test.go (about) 1 // Copyright 2023 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package gover 6 7 import ( 8 "reflect" 9 "testing" 10 ) 11 12 func TestCompare(t *testing.T) { test2(t, compareTests, "Compare", Compare) } 13 14 var compareTests = []testCase2[string, string, int]{ 15 {"", "", 0}, 16 {"x", "x", 0}, 17 {"", "x", 0}, 18 {"1", "1.1", -1}, 19 {"1.5", "1.6", -1}, 20 {"1.5", "1.10", -1}, 21 {"1.6", "1.6.1", -1}, 22 {"1.19", "1.19.0", 0}, 23 {"1.19rc1", "1.19", -1}, 24 {"1.20", "1.20.0", 0}, 25 {"1.20rc1", "1.20", -1}, 26 {"1.21", "1.21.0", -1}, 27 {"1.21", "1.21rc1", -1}, 28 {"1.21rc1", "1.21.0", -1}, 29 {"1.6", "1.19", -1}, 30 {"1.19", "1.19.1", -1}, 31 {"1.19rc1", "1.19", -1}, 32 {"1.19rc1", "1.19.1", -1}, 33 {"1.19rc1", "1.19rc2", -1}, 34 {"1.19.0", "1.19.1", -1}, 35 {"1.19rc1", "1.19.0", -1}, 36 {"1.19alpha3", "1.19beta2", -1}, 37 {"1.19beta2", "1.19rc1", -1}, 38 {"1.1", "1.99999999999999998", -1}, 39 {"1.99999999999999998", "1.99999999999999999", -1}, 40 } 41 42 func TestLang(t *testing.T) { test1(t, langTests, "Lang", Lang) } 43 44 var langTests = []testCase1[string, string]{ 45 {"1.2rc3", "1.2"}, 46 {"1.2.3", "1.2"}, 47 {"1.2", "1.2"}, 48 {"1", "1"}, 49 {"1.999testmod", "1.999"}, 50 } 51 52 func TestIsLang(t *testing.T) { test1(t, isLangTests, "IsLang", IsLang) } 53 54 var isLangTests = []testCase1[string, bool]{ 55 {"1.2rc3", false}, 56 {"1.2.3", false}, 57 {"1.999testmod", false}, 58 {"1.22", true}, 59 {"1.21", true}, 60 {"1.20", false}, // == 1.20.0 61 {"1.19", false}, // == 1.20.0 62 {"1.3", false}, // == 1.3.0 63 {"1.2", false}, // == 1.2.0 64 {"1", false}, // == 1.0.0 65 } 66 67 func TestPrev(t *testing.T) { test1(t, prevTests, "Prev", Prev) } 68 69 var prevTests = []testCase1[string, string]{ 70 {"", ""}, 71 {"0", "0"}, 72 {"1.3rc4", "1.2"}, 73 {"1.3.5", "1.2"}, 74 {"1.3", "1.2"}, 75 {"1", "1"}, 76 {"1.99999999999999999", "1.99999999999999998"}, 77 {"1.40000000000000000", "1.39999999999999999"}, 78 } 79 80 func TestIsValid(t *testing.T) { test1(t, isValidTests, "IsValid", IsValid) } 81 82 var isValidTests = []testCase1[string, bool]{ 83 {"1.2rc3", true}, 84 {"1.2.3", true}, 85 {"1.999testmod", true}, 86 {"1.600+auto", false}, 87 {"1.22", true}, 88 {"1.21.0", true}, 89 {"1.21rc2", true}, 90 {"1.21", true}, 91 {"1.20.0", true}, 92 {"1.20", true}, 93 {"1.19", true}, 94 {"1.3", true}, 95 {"1.2", true}, 96 {"1", true}, 97 } 98 99 type testCase1[In, Out any] struct { 100 in In 101 out Out 102 } 103 104 type testCase2[In1, In2, Out any] struct { 105 in1 In1 106 in2 In2 107 out Out 108 } 109 110 type testCase3[In1, In2, In3, Out any] struct { 111 in1 In1 112 in2 In2 113 in3 In3 114 out Out 115 } 116 117 func test1[In, Out any](t *testing.T, tests []testCase1[In, Out], name string, f func(In) Out) { 118 t.Helper() 119 for _, tt := range tests { 120 if out := f(tt.in); !reflect.DeepEqual(out, tt.out) { 121 t.Errorf("%s(%v) = %v, want %v", name, tt.in, out, tt.out) 122 } 123 } 124 } 125 126 func test2[In1, In2, Out any](t *testing.T, tests []testCase2[In1, In2, Out], name string, f func(In1, In2) Out) { 127 t.Helper() 128 for _, tt := range tests { 129 if out := f(tt.in1, tt.in2); !reflect.DeepEqual(out, tt.out) { 130 t.Errorf("%s(%+v, %+v) = %+v, want %+v", name, tt.in1, tt.in2, out, tt.out) 131 } 132 } 133 } 134 135 func test3[In1, In2, In3, Out any](t *testing.T, tests []testCase3[In1, In2, In3, Out], name string, f func(In1, In2, In3) Out) { 136 t.Helper() 137 for _, tt := range tests { 138 if out := f(tt.in1, tt.in2, tt.in3); !reflect.DeepEqual(out, tt.out) { 139 t.Errorf("%s(%+v, %+v, %+v) = %+v, want %+v", name, tt.in1, tt.in2, tt.in3, out, tt.out) 140 } 141 } 142 }