summaryrefslogtreecommitdiff
path: root/gcc/testsuite/go.test/test/ken/array.go
diff options
context:
space:
mode:
authorupstream source tree <ports@midipix.org>2015-03-15 20:14:05 -0400
committerupstream source tree <ports@midipix.org>2015-03-15 20:14:05 -0400
commit554fd8c5195424bdbcabf5de30fdc183aba391bd (patch)
tree976dc5ab7fddf506dadce60ae936f43f58787092 /gcc/testsuite/go.test/test/ken/array.go
downloadcbb-gcc-4.6.4-554fd8c5195424bdbcabf5de30fdc183aba391bd.tar.bz2
cbb-gcc-4.6.4-554fd8c5195424bdbcabf5de30fdc183aba391bd.tar.xz
obtained gcc-4.6.4.tar.bz2 from upstream website;upstream
verified gcc-4.6.4.tar.bz2.sig; imported gcc-4.6.4 source tree from verified upstream tarball. downloading a git-generated archive based on the 'upstream' tag should provide you with a source tree that is binary identical to the one extracted from the above tarball. if you have obtained the source via the command 'git clone', however, do note that line-endings of files in your working directory might differ from line-endings of the respective files in the upstream repository.
Diffstat (limited to 'gcc/testsuite/go.test/test/ken/array.go')
-rw-r--r--gcc/testsuite/go.test/test/ken/array.go133
1 files changed, 133 insertions, 0 deletions
diff --git a/gcc/testsuite/go.test/test/ken/array.go b/gcc/testsuite/go.test/test/ken/array.go
new file mode 100644
index 000000000..40209f5da
--- /dev/null
+++ b/gcc/testsuite/go.test/test/ken/array.go
@@ -0,0 +1,133 @@
+// $G $D/$F.go && $L $F.$A && ./$A.out
+
+// Copyright 2009 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package main
+
+func setpd(a []int) {
+ // print("setpd a=", a, " len=", len(a), " cap=", cap(a), "\n");
+ for i := 0; i < len(a); i++ {
+ a[i] = i
+ }
+}
+
+func sumpd(a []int) int {
+ // print("sumpd a=", a, " len=", len(a), " cap=", cap(a), "\n");
+ t := 0
+ for i := 0; i < len(a); i++ {
+ t += a[i]
+ }
+ // print("sumpd t=", t, "\n");
+ return t
+}
+
+func setpf(a *[20]int) {
+ // print("setpf a=", a, " len=", len(a), " cap=", cap(a), "\n");
+ for i := 0; i < len(a); i++ {
+ a[i] = i
+ }
+}
+
+func sumpf(a *[20]int) int {
+ // print("sumpf a=", a, " len=", len(a), " cap=", cap(a), "\n");
+ t := 0
+ for i := 0; i < len(a); i++ {
+ t += a[i]
+ }
+ // print("sumpf t=", t, "\n");
+ return t
+}
+
+func res(t int, lb, hb int) {
+ sb := (hb - lb) * (hb + lb - 1) / 2
+ if t != sb {
+ print("lb=", lb,
+ "; hb=", hb,
+ "; t=", t,
+ "; sb=", sb,
+ "\n")
+ panic("res")
+ }
+}
+
+// call ptr dynamic with ptr dynamic
+func testpdpd() {
+ a := make([]int, 10, 100)
+ if len(a) != 10 && cap(a) != 100 {
+ print("len and cap from new: ", len(a), " ", cap(a), "\n")
+ panic("fail")
+ }
+
+ a = a[0:100]
+ setpd(a)
+
+ a = a[0:10]
+ res(sumpd(a), 0, 10)
+
+ a = a[5:25]
+ res(sumpd(a), 5, 25)
+}
+
+// call ptr fixed with ptr fixed
+func testpfpf() {
+ var a [20]int
+
+ setpf(&a)
+ res(sumpf(&a), 0, 20)
+}
+
+// call ptr dynamic with ptr fixed from new
+func testpdpf1() {
+ a := new([40]int)
+ setpd(a[0:])
+ res(sumpd(a[0:]), 0, 40)
+
+ b := (*a)[5:30]
+ res(sumpd(b), 5, 30)
+}
+
+// call ptr dynamic with ptr fixed from var
+func testpdpf2() {
+ var a [80]int
+
+ setpd(a[0:])
+ res(sumpd(a[0:]), 0, 80)
+}
+
+// generate bounds error with ptr dynamic
+func testpdfault() {
+ a := make([]int, 100)
+
+ print("good\n")
+ for i := 0; i < 100; i++ {
+ a[i] = 0
+ }
+ print("should fault\n")
+ a[100] = 0
+ print("bad\n")
+}
+
+// generate bounds error with ptr fixed
+func testfdfault() {
+ var a [80]int
+
+ print("good\n")
+ for i := 0; i < 80; i++ {
+ a[i] = 0
+ }
+ print("should fault\n")
+ x := 80
+ a[x] = 0
+ print("bad\n")
+}
+
+func main() {
+ testpdpd()
+ testpfpf()
+ testpdpf1()
+ testpdpf2()
+ // print("testpdfault\n"); testpdfault();
+ // print("testfdfault\n"); testfdfault();
+}