summaryrefslogtreecommitdiff
path: root/misc/cgo
diff options
context:
space:
mode:
authorRuss Cox <rsc@golang.org>2009-10-03 11:33:51 -0700
committerRuss Cox <rsc@golang.org>2009-10-03 11:33:51 -0700
commitf21bbf3678516d4dbccaba168458e6c35b8f19ab (patch)
tree3c13dbf3a1d4485a58e1453ef77f41854a3116a5 /misc/cgo
parent8508fdc107edba1d0f4dd2ce08cb078386328a79 (diff)
downloadgolang-f21bbf3678516d4dbccaba168458e6c35b8f19ab.tar.gz
add cgo test that doesn't depend on
non-standard libraries and add to build. R=r DELTA=211 (210 added, 0 deleted, 1 changed) OCL=35293 CL=35307
Diffstat (limited to 'misc/cgo')
-rw-r--r--misc/cgo/stdio/Makefile2
-rw-r--r--misc/cgo/stdio/chain.go43
-rw-r--r--misc/cgo/stdio/golden.out150
-rwxr-xr-xmisc/cgo/stdio/test.bash15
4 files changed, 209 insertions, 1 deletions
diff --git a/misc/cgo/stdio/Makefile b/misc/cgo/stdio/Makefile
index 010e17974..83b1ed9e5 100644
--- a/misc/cgo/stdio/Makefile
+++ b/misc/cgo/stdio/Makefile
@@ -8,7 +8,7 @@ TARG=stdio
CGOFILES=\
file.go
-CLEANFILES+=hello fib chain
+CLEANFILES+=hello fib chain run.out
include $(GOROOT)/src/Make.pkg
diff --git a/misc/cgo/stdio/chain.go b/misc/cgo/stdio/chain.go
new file mode 100644
index 000000000..18c598d4d
--- /dev/null
+++ b/misc/cgo/stdio/chain.go
@@ -0,0 +1,43 @@
+// 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.
+
+// Pass numbers along a chain of threads.
+
+package main
+
+import (
+ "runtime";
+ "stdio";
+ "strconv";
+)
+
+const N = 10
+const R = 5
+
+func link(left chan<- int, right <-chan int) {
+ // Keep the links in dedicated operating system
+ // threads, so that this program tests coordination
+ // between pthreads and not just goroutines.
+ runtime.LockOSThread();
+ for {
+ v := <-right;
+ stdio.Puts(strconv.Itoa(v));
+ left <- 1+v;
+ }
+}
+
+func main() {
+ leftmost := make(chan int);
+ var left chan int;
+ right := leftmost;
+ for i := 0; i < N; i++ {
+ left, right = right, make(chan int);
+ go link(left, right);
+ }
+ for i := 0; i < R; i++ {
+ right <- 0;
+ x := <-leftmost;
+ stdio.Puts(strconv.Itoa(x));
+ }
+}
diff --git a/misc/cgo/stdio/golden.out b/misc/cgo/stdio/golden.out
new file mode 100644
index 000000000..c0e496547
--- /dev/null
+++ b/misc/cgo/stdio/golden.out
@@ -0,0 +1,150 @@
+* hello
+hello, world
+* fib
+0
+1
+1
+2
+3
+5
+8
+13
+21
+34
+55
+89
+144
+233
+377
+610
+987
+1597
+2584
+4181
+6765
+10946
+17711
+28657
+46368
+75025
+121393
+196418
+317811
+514229
+832040
+1346269
+2178309
+3524578
+5702887
+9227465
+14930352
+24157817
+39088169
+63245986
+102334155
+165580141
+267914296
+433494437
+701408733
+1134903170
+1836311903
+2971215073
+4807526976
+7778742049
+12586269025
+20365011074
+32951280099
+53316291173
+86267571272
+139583862445
+225851433717
+365435296162
+591286729879
+956722026041
+1548008755920
+2504730781961
+4052739537881
+6557470319842
+10610209857723
+17167680177565
+27777890035288
+44945570212853
+72723460248141
+117669030460994
+190392490709135
+308061521170129
+498454011879264
+806515533049393
+1304969544928657
+2111485077978050
+3416454622906707
+5527939700884757
+8944394323791464
+14472334024676221
+23416728348467685
+37889062373143906
+61305790721611591
+99194853094755497
+160500643816367088
+259695496911122585
+420196140727489673
+679891637638612258
+1100087778366101931
+1779979416004714189
+2880067194370816120
+* chain
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
diff --git a/misc/cgo/stdio/test.bash b/misc/cgo/stdio/test.bash
new file mode 100755
index 000000000..8849fa478
--- /dev/null
+++ b/misc/cgo/stdio/test.bash
@@ -0,0 +1,15 @@
+#!/bin/sh
+# 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.
+
+set -e
+make hello fib chain
+echo '*' hello >run.out
+./hello >>run.out
+echo '*' fib >>run.out
+./fib >>run.out
+echo '*' chain >>run.out
+./chain >>run.out
+diff run.out golden.out
+make clean