#!/usr/bin/env bash
# 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.

GOBIN="${GOBIN:-$HOME/bin}"

. "$GOROOT"/src/Make.$GOARCH

if [ -z "$O" ]; then
	echo 'missing $O - maybe no Make.$GOARCH?' 1>&2
	exit 1
fi

rm -f *.$O

for i in \
	file.go \
	helloworld.go \
	helloworld3.go \
	echo.go \
	cat.go \
	cat_rot13.go \
	sum.go \
	sort.go \
	sortmain.go \
	print.go \
	print_string.go \
	sieve.go \
	sieve1.go \
	server1.go \
; do
	BASE=$(basename $i .go)

	"$GOBIN"/$GC $i
done

function testit {
	"$GOBIN"/$LD $1.$O
	x=$(echo $(./$O.out $2 2>&1))  # extra echo canonicalizes
	if [ "$x" != "$3" ]
	then
		echo $1 failed: '"'$x'"' is not '"'$3'"'
	fi
}

function testitpipe {
	"$GOBIN"/$LD $1.$O
	x=$(echo $(./$O.out | $2 2>&1))  # extra echo canonicalizes
	if [ "$x" != "$3" ]
	then
		echo $1 failed: '"'$x'"' is not '"'$3'"'
	fi
}


testit helloworld "" "Hello, world; or Καλημέρα κόσμε; or こんにちは 世界"
testit helloworld3 "" "hello, world can't open file; err=no such file or directory"
testit echo "hello, world" "hello, world"
testit sum "" "6"

alphabet=abcdefghijklmnopqrstuvwxyz
rot13=nopqrstuvwxyzabcdefghijklm
echo $alphabet | testit cat "" $alphabet
echo $alphabet | testit cat_rot13 "--rot13" $rot13
echo $rot13 | testit cat_rot13 "--rot13" $alphabet

testit sortmain "" "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"

testit print "" "18446744073709551615 -1 18446744073709551615 {77 Sunset Strip} [1 2 3 4] 18446744073709551615 {77 Sunset Strip} [1 2 3 4] 18446744073709551615 {77 Sunset Strip} [1 2 3 4]"
testit print_string "" "77 Sunset Strip"

testitpipe sieve "sed 10q" "2 3 5 7 11 13 17 19 23 29"
testitpipe sieve "sed 10q" "2 3 5 7 11 13 17 19 23 29"

# server hangs; don't run it, just compile it
"$GOBIN"/$GC server.go
testit server1 "" ""

rm -f $O.out *.$O
