go/test
Yi Yang da4687923b cmd/compile: add rewrite rules for arithmetic operations
Add the following common local transformations

(t + x) - (t + y) == x - y
(t + x) - (y + t) == x - y
(x + t) - (y + t) == x - y
(x + t) - (t + y) == x - y
(x - t) + (t + y) == x + y
(x - t) + (y + t) == x + y

The compiler itself matches such patterns many times. This also aligns with other popular compilers.

Fixes #59111

Change-Id: Ibdfdb414782f8fcaa20b84ac5d43d0d9ae2c7b60
GitHub-Last-Rev: 1aad82e62e
GitHub-Pull-Request: golang/go#59119
Reviewed-on: https://go-review.googlesource.com/c/go/+/477555
Reviewed-by: Keith Randall <khr@golang.org>
Reviewed-by: Heschi Kreinick <heschi@google.com>
Auto-Submit: Keith Randall <khr@golang.org>
Reviewed-by: Keith Randall <khr@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Run-TryBot: Keith Randall <khr@golang.org>
2023-03-20 15:42:09 +00:00
..
abi
alias3.dir
asmhdr.dir
bench test/bench/go1: eliminate start-up time 2022-11-01 17:07:14 +00:00
chan
closure3.dir test: relax closure name matching in closure3.go 2022-10-01 01:52:16 +00:00
closure5.dir test: use dot-relative imports where appropriate 2022-03-24 02:14:15 +00:00
codegen cmd/compile: add rewrite rules for arithmetic operations 2023-03-20 15:42:09 +00:00
ddd2.dir
dwarf
fixedbugs Revert "cmd/link: establish dependable package initialization order" 2023-03-09 19:19:41 +00:00
import2.dir
import4.dir go/types, types2: use "and not used" instead of "but not used" in error messages 2022-09-27 21:10:19 +00:00
interface cmd/compile: use "missing method m" instead of "missing m method" 2022-09-24 17:04:15 +00:00
intrinsic.dir runtime: replace all uses of CtzXX with TrailingZerosXX 2022-10-18 18:06:27 +00:00
ken
linkname.dir test: compile source files as if from "test" module 2022-03-24 17:50:47 +00:00
method4.dir
retjmp.dir
runtime
stress
syntax go/parser: adjustments to error messages 2022-09-01 22:37:04 +00:00
typeparam test: test for issue 53087 2023-03-08 16:23:09 +00:00
uintptrescapes.dir
64bit.go
235.go
alg.go
alias.go
alias1.go
alias2.go cmd/compile: use "cannot use %s as %s value in %s: %s" error message 2022-09-28 22:28:39 +00:00
alias3.go
align.go
append.go
append1.go cmd/compile: use "cannot use %s as %s value in %s: %s" error message 2022-09-28 22:28:39 +00:00
args.go
armimm.go
asmhdr.go
assign.go
assign1.go
atomicload.go
bigalg.go
bigmap.go
blank.go
blank1.go
bom.go
bombad.go
bounds.go
cannotassign.go
chancap.go
chanlinear.go
char_lit.go
char_lit1.go
checkbce.go
clear.go cmd/compile: add clear(x) builtin 2023-01-31 19:43:07 +00:00
clearfat.go
closedchan.go
closure.go
closure1.go
closure2.go cmd/compile: experimental loop iterator capture semantics change 2023-03-06 18:34:24 +00:00
closure3.go
closure4.go
closure5.go
closure6.go
closure7.go
cmp.go
cmp6.go
cmplx.go
cmplxdivide.c
cmplxdivide.go
cmplxdivide1.go
complit.go
complit1.go
compos.go
const.go
const1.go
const2.go
const3.go
const4.go
const5.go
const6.go
const7.go go/types, types2: check integer constant literal overflow 2022-08-16 01:11:29 +00:00
const8.go test: add more tests for const decls with ommitted RHS expressions 2022-06-28 18:11:31 +00:00
convert.go
convert1.go
convert2.go go/types, types2: implement slice-to-array conversions 2022-09-08 15:55:44 +00:00
convert3.go
convert4.go cmd/compile: implement slice-to-array conversions 2022-09-19 18:58:26 +00:00
convinline.go cmd/compile: handle integer conversions in static init inliner 2022-11-17 13:46:05 +00:00
convlit.go
convlit1.go
convT2X.go
copy.go
copy1.go
crlf.go
ddd.go
ddd1.go cmd/compile: use "cannot use %s as %s value in %s: %s" error message 2022-09-28 22:28:39 +00:00
ddd2.go
decl.go
declbad.go
defer.go
defererrcheck.go
deferfin.go
defernil.go
deferprint.go
deferprint.out
devirt.go
directive.go cmd/compile: restrict //go:notinheap to runtime/internal/sys 2022-09-02 06:22:23 +00:00
directive2.go cmd/compile: restrict //go:notinheap to runtime/internal/sys 2022-09-02 06:22:23 +00:00
divide.go
divmod.go
embedfunc.go
embedvers.go
empty.go
env.go
eof.go
eof1.go
escape.go cmd/compile: experimental loop iterator capture semantics change 2023-03-06 18:34:24 +00:00
escape2.go
escape2n.go
escape3.go
escape4.go test: enable inlining tests for functions with local type 2023-01-31 20:36:55 +00:00
escape5.go
escape_array.go
escape_calls.go
escape_closure.go
escape_field.go
escape_goto.go
escape_hash_maphash.go
escape_iface.go [dev.unified] test: break escape_iface.go into unified/nounified variants 2022-06-30 18:41:26 +00:00
escape_iface_unified.go cmd: remove GOEXPERIMENT=nounified knob 2023-01-25 21:16:32 +00:00
escape_indir.go
escape_level.go
escape_map.go
escape_param.go
escape_runtime_atomic.go
escape_selfassign.go
escape_slice.go cmd/compile: implement slice-to-array conversions 2022-09-19 18:58:26 +00:00
escape_struct_param1.go
escape_struct_param2.go
escape_struct_return.go
escape_sync_atomic.go
escape_unsafe.go test: fix typo in escape_unsafe.go 2022-09-07 17:25:59 +00:00
fibo.go
finprofiled.go
float_lit.go
float_lit2.go
float_lit3.go
floatcmp.go
for.go
func.go
func1.go
func2.go
func3.go
func4.go
func5.go
func6.go
func7.go
func8.go
funcdup.go
funcdup2.go
fuse.go
gc.go
gc1.go
gc2.go
gcgort.go
gcstring.go
goprint.go
goprint.out
goto.go
heapsampling.go test/heapsampling.go: slow down allocation rate and reduce iterations 2022-05-27 21:36:06 +00:00
helloworld.go
helloworld.out
if.go
import.go
import1.go go/types, types2: use "and not used" instead of "but not used" in error messages 2022-09-27 21:10:19 +00:00
import2.go
import4.go
import5.go
import6.go
index.go
index0.go
index1.go
index2.go
indirect.go
indirect1.go
init.go
init1.go
initcomma.go
initexp.go cmd/compile: use "init... cycle" instead of "init... loop" in error messages 2022-09-23 20:27:09 +00:00
initialize.go cmd/compile: handle simple inlined calls in staticinit 2022-11-16 04:04:52 +00:00
initializerr.go
initloop.go
inline.go cmd/compile: reorder operations in SCCs to enable more inlining 2023-03-09 22:13:26 +00:00
inline_big.go cmd/compile: flag 'large' functions when -m=2+ in effect 2023-01-24 13:28:54 +00:00
inline_caller.go
inline_callers.go
inline_endian.go cmd/compile: make encoding/binary appends cheaper to inline 2022-09-15 21:05:02 +00:00
inline_literal.go
inline_math_bits_rotate.go
inline_sync.go sync: convert RWMutex.{readerCount,readerWait} to atomic type 2022-09-09 18:28:35 +00:00
inline_unified.go cmd: remove GOEXPERIMENT=nounified knob 2023-01-25 21:16:32 +00:00
inline_variadic.go
int_lit.go
intcvt.go
intrinsic.go
intrinsic_atomic.go misc, test: fix test error for loong64 2022-05-20 16:16:37 +00:00
iota.go
label.go
label1.go
linkmain.go
linkmain_run.go test: update test/run.go and some tests to use importcfg 2022-10-12 23:16:41 +00:00
linkname.go
linkname3.go
linkobj.go test: update test/run.go and some tests to use importcfg 2022-10-12 23:16:41 +00:00
linkx.go
linkx_run.go
literal.go
literal2.go
live.go cmd/compile: sort liveness variable reports 2023-01-21 21:08:00 +00:00
live1.go
live2.go
live_regabi.go test: test that we schedule OpArgIntReg early 2023-01-21 21:08:30 +00:00
live_uintptrkeepalive.go all: fix spelling 2022-05-17 19:51:29 +00:00
loopbce.go cmd/compile: make loopbce handle 8, 16 and 32 bit induction variables 2023-01-23 18:10:40 +00:00
mainsig.go
makechan.go
makemap.go
makenew.go
makeslice.go
mallocfin.go
map.go
map1.go
mapclear.go
maplinear.go
maymorestack.go
mergemul.go
method.go
method1.go cmd/compile: use "method T.m already declared" for method redeclaration errors 2022-09-27 21:59:19 +00:00
method2.go
method3.go
method4.go
method5.go
method6.go
method7.go
named.go
named1.go
nil.go
nilcheck.go [dev.unified] test: tweak nilcheck test 2022-06-30 18:41:59 +00:00
nilptr.go
nilptr2.go
nilptr3.go cmd/compile: improve scheduling pass 2023-01-20 04:54:01 +00:00
nilptr4.go
nilptr5.go cmd/compile: handle partially overlapping assignments 2022-08-23 19:56:32 +00:00
nilptr5_aix.go
nilptr5_wasm.go
nilptr_aix.go
noinit.go Revert "cmd/link: establish dependable package initialization order" 2023-03-09 19:19:41 +00:00
nosplit.go misc, test: fix test error for loong64 2022-05-20 16:16:37 +00:00
nowritebarrier.go
nul1.go
opt_branchlikely.go
parentype.go
peano.go
phiopt.go
print.go
print.out
printbig.go
printbig.out
prove.go cmd/compile: use zero constants in comparisons where possible 2023-02-27 21:38:30 +00:00
prove_constant_folding.go cmd/compile: fold constants found by prove 2022-05-04 20:30:17 +00:00
range.go
README.md cmd/dist, test: convert test/run.go runner to a cmd/go test 2023-02-28 01:11:37 +00:00
recover.go
recover1.go
recover2.go
recover3.go
recover4.go
recover5.go
reflectmethod1.go
reflectmethod2.go
reflectmethod3.go
reflectmethod4.go
reflectmethod5.go
reflectmethod6.go
reflectmethod7.go
reflectmethod8.go
rename.go
rename1.go
reorder.go
reorder2.go
retjmp.go
return.go
rotate.go
rotate0.go
rotate1.go
rotate2.go
rotate3.go
rune.go
runtime.go
shift1.go
shift2.go
shift3.go cmd/compile: adjust types2 shift check to match go/types (cleanup) 2022-04-07 17:19:55 +00:00
sieve.go
sigchld.go
sigchld.out
simassign.go
sizeof.go
slice3.go
slice3err.go
slicecap.go
sliceopt.go
solitaire.go
stack.go
stackobj.go
stackobj2.go
stackobj3.go
strcopy.go
strength.go
string_lit.go
stringrange.go
struct0.go
switch.go [dev.unified] test: add switch test case for tricky nil handling 2022-07-19 23:30:49 +00:00
switch2.go go/parser: adjustments to error messages 2022-09-01 22:37:04 +00:00
switch3.go
switch4.go
switch5.go
switch6.go cmd/compile: use "missing method m" instead of "missing m method" 2022-09-24 17:04:15 +00:00
switch7.go
tinyfin.go
torture.go
turing.go
typecheck.go
typecheckloop.go cmd/compile: use "init... cycle" instead of "init... loop" in error messages 2022-09-23 20:27:09 +00:00
typeswitch.go
typeswitch1.go
typeswitch2.go
typeswitch2b.go go/types, types2: use "and not used" instead of "but not used" in error messages 2022-09-27 21:10:19 +00:00
typeswitch3.go
uintptrescapes.go
uintptrescapes2.go
uintptrescapes3.go
uintptrkeepalive.go cmd/compile: add //go:uintptrkeepalive 2022-04-21 18:06:38 +00:00
undef.go
unsafe_slice_data.go cmd/compile: add support for unsafe.{String,StringData,SliceData} 2022-08-31 17:15:15 +00:00
unsafe_string.go cmd/compile: add support for unsafe.{String,StringData,SliceData} 2022-08-31 17:15:15 +00:00
unsafe_string_data.go cmd/compile: add support for unsafe.{String,StringData,SliceData} 2022-08-31 17:15:15 +00:00
unsafebuiltins.go cmd/compile: add support for unsafe.{String,StringData,SliceData} 2022-08-31 17:15:15 +00:00
used.go
utf.go
varerr.go
varinit.go
winbatch.go
writebarrier.go
zerodivide.go

The test directory contains tests of the Go tool chain and runtime. It includes black box tests, regression tests, and error output tests. They are run as part of all.bash.

To run just these tests, execute:

../bin/go test internal/testdir

To run just tests from specified files in this directory, execute:

../bin/go test internal/testdir -run='Test/(file1.go|file2.go|...)'

Standard library tests should be written as regular Go tests in the appropriate package.

The tool chain and runtime also have regular Go tests in their packages. The main reasons to add a new test to this directory are:

  • it is most naturally expressed using the test runner; or
  • it is also applicable to gccgo and other Go tool chains.