1// Copyright 2021 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
5package buildcfg
6
7import (
8	"os"
9	"testing"
10)
11
12func TestConfigFlags(t *testing.T) {
13	os.Setenv("GOAMD64", "v1")
14	if goamd64() != 1 {
15		t.Errorf("Wrong parsing of GOAMD64=v1")
16	}
17	os.Setenv("GOAMD64", "v4")
18	if goamd64() != 4 {
19		t.Errorf("Wrong parsing of GOAMD64=v4")
20	}
21	Error = nil
22	os.Setenv("GOAMD64", "1")
23	if goamd64(); Error == nil {
24		t.Errorf("Wrong parsing of GOAMD64=1")
25	}
26
27	os.Setenv("GORISCV64", "rva20u64")
28	if goriscv64() != 20 {
29		t.Errorf("Wrong parsing of RISCV64=rva20u64")
30	}
31	os.Setenv("GORISCV64", "rva22u64")
32	if goriscv64() != 22 {
33		t.Errorf("Wrong parsing of RISCV64=rva22u64")
34	}
35	Error = nil
36	os.Setenv("GORISCV64", "rva22")
37	if _ = goriscv64(); Error == nil {
38		t.Errorf("Wrong parsing of RISCV64=rva22")
39	}
40	Error = nil
41	os.Setenv("GOARM64", "v7.0")
42	if _ = goarm64(); Error == nil {
43		t.Errorf("Wrong parsing of GOARM64=7.0")
44	}
45	Error = nil
46	os.Setenv("GOARM64", "8.0")
47	if _ = goarm64(); Error == nil {
48		t.Errorf("Wrong parsing of GOARM64=8.0")
49	}
50	Error = nil
51	os.Setenv("GOARM64", "v8.0,lsb")
52	if _ = goarm64(); Error == nil {
53		t.Errorf("Wrong parsing of GOARM64=v8.0,lsb")
54	}
55	os.Setenv("GOARM64", "v8.0,lse")
56	if goarm64().Version != "v8.0" || goarm64().LSE != true || goarm64().Crypto != false {
57		t.Errorf("Wrong parsing of GOARM64=v8.0,lse")
58	}
59	os.Setenv("GOARM64", "v8.0,crypto")
60	if goarm64().Version != "v8.0" || goarm64().LSE != false || goarm64().Crypto != true {
61		t.Errorf("Wrong parsing of GOARM64=v8.0,crypto")
62	}
63	os.Setenv("GOARM64", "v8.0,crypto,lse")
64	if goarm64().Version != "v8.0" || goarm64().LSE != true || goarm64().Crypto != true {
65		t.Errorf("Wrong parsing of GOARM64=v8.0,crypto,lse")
66	}
67	os.Setenv("GOARM64", "v8.0,lse,crypto")
68	if goarm64().Version != "v8.0" || goarm64().LSE != true || goarm64().Crypto != true {
69		t.Errorf("Wrong parsing of GOARM64=v8.0,lse,crypto")
70	}
71	os.Setenv("GOARM64", "v9.0")
72	if goarm64().Version != "v9.0" || goarm64().LSE != true || goarm64().Crypto != false {
73		t.Errorf("Wrong parsing of GOARM64=v9.0")
74	}
75}
76
77func TestGoarm64FeaturesSupports(t *testing.T) {
78	g, _ := ParseGoarm64("v9.3")
79
80	if !g.Supports("v9.3") {
81		t.Errorf("Wrong goarm64Features.Supports for v9.3, v9.3")
82	}
83
84	if g.Supports("v9.4") {
85		t.Errorf("Wrong goarm64Features.Supports for v9.3, v9.4")
86	}
87
88	if !g.Supports("v8.8") {
89		t.Errorf("Wrong goarm64Features.Supports for v9.3, v8.8")
90	}
91
92	if g.Supports("v8.9") {
93		t.Errorf("Wrong goarm64Features.Supports for v9.3, v8.9")
94	}
95
96	if g.Supports(",lse") {
97		t.Errorf("Wrong goarm64Features.Supports for v9.3, ,lse")
98	}
99}
100
101func TestGogoarchTags(t *testing.T) {
102	old_goarch := GOARCH
103	old_goarm64 := GOARM64
104
105	GOARCH = "arm64"
106
107	os.Setenv("GOARM64", "v9.5")
108	GOARM64 = goarm64()
109	tags := gogoarchTags()
110	want := []string{"arm64.v9.0", "arm64.v9.1", "arm64.v9.2", "arm64.v9.3", "arm64.v9.4", "arm64.v9.5",
111		"arm64.v8.0", "arm64.v8.1", "arm64.v8.2", "arm64.v8.3", "arm64.v8.4", "arm64.v8.5", "arm64.v8.6", "arm64.v8.7", "arm64.v8.8", "arm64.v8.9"}
112	if len(tags) != len(want) {
113		t.Errorf("Wrong number of tags for GOARM64=v9.5")
114	} else {
115		for i, v := range tags {
116			if v != want[i] {
117				t.Error("Wrong tags for GOARM64=v9.5")
118				break
119			}
120		}
121	}
122
123	GOARCH = old_goarch
124	GOARM64 = old_goarm64
125}
126