1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
|
From 1fc115c28c80db7d0af25b87bdb35811ef7e10a3 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Daniel=20Mart=C3=AD?= <mvdan@mvdan.cc>
Date: Sat, 23 May 2020 21:35:38 +0100
Subject: [PATCH] interp: fix tests on 32-bit architectures
Three test cases assumed 64-bit integer sizes. Fix that, and make sure
that our amd64 CI runners also test with GOARCH=386, to catch such
future mistakes.
While at it, update the alpine image version for CI.
Fixes #571.
---
.github/workflows/test.yml | 5 ++++-
interp/interp_test.go | 17 +++++++++++++----
2 files changed, 17 insertions(+), 5 deletions(-)
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index 166d9018..1d1375ea 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -21,6 +21,9 @@ jobs:
- name: Test with -short -race
run: go test -short -race -count=1 ./...
+ - name: Test with GOARCH=386
+ run: GOARCH=386 go test -count=1 ./...
+ if: matrix.platform == 'ubuntu-latest'
- name: gofmt check
run: diff <(echo -n) <(gofmt -d .)
if: matrix.platform == 'ubuntu-latest'
@@ -31,7 +34,7 @@ jobs:
- name: Checkout code
uses: actions/checkout@v2
- name: Test as root, without cgo, and with busybox
- run: docker run -v="$PWD:/pwd" -w=/pwd -e=CGO_ENABLED=0 golang:1.14.1-alpine go test ./...
+ run: docker run -v="$PWD:/pwd" -w=/pwd -e=CGO_ENABLED=0 golang:1.14.3-alpine go test ./...
fuzz:
runs-on: ubuntu-latest
diff --git a/interp/interp_test.go b/interp/interp_test.go
index 9b4d43e2..52589281 100644
--- a/interp/interp_test.go
+++ b/interp/interp_test.go
@@ -9,6 +9,7 @@ import (
"fmt"
"io"
"io/ioutil"
+ "math/bits"
"os"
"os/exec"
"path/filepath"
@@ -269,9 +270,6 @@ var runTests = []runTest{
{"printf %d,%i 3 4", "3,4"},
{"printf %d", "0"},
{"printf %d,%d 010 0x10", "8,16"},
- {"printf %i,%u -3 -3", "-3,18446744073709551613"},
- {"printf %o -3", "1777777777777777777775"},
- {"printf %x -3", "fffffffffffffffd"},
{"printf %c,%c,%c foo àa", "f,\xc3,\x00"}, // TODO: use a rune?
{"printf %3s a", " a"},
{"printf %3i 1", " 1"},
@@ -2624,12 +2622,23 @@ var runTestsWindows = []runTest{
{"cmd() { :; }; command cmd /c 'echo foo'", "foo\r\n"},
}
+// These tests are specific to 64-bit architectures, and that's fine. We don't
+// need to add explicit versions for 32-bit.
+var runTests64bit = []runTest{
+ {"printf %i,%u -3 -3", "-3,18446744073709551613"},
+ {"printf %o -3", "1777777777777777777775"},
+ {"printf %x -3", "fffffffffffffffd"},
+}
+
func init() {
if runtime.GOOS == "windows" {
runTests = append(runTests, runTestsWindows...)
- } else {
+ } else { // Unix-y
runTests = append(runTests, runTestsUnix...)
}
+ if bits.UintSize == 64 {
+ runTests = append(runTests, runTests64bit...)
+ }
}
// ln -s: wine doesn't implement symlinks; see https://bugs.winehq.org/show_bug.cgi?id=44948
|