// $G $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 assertequal(is, shouldbe int, msg string) {
	if is != shouldbe {
		print("assertion fail", msg, "\n")
		panic(1)
	}
}

func f1() {
}

func f2(a int) {
}

func f3(a, b int) int {
	return a+b
}

func f4(a, b int, c float) int {
	return (a+b)/2 + int(c)
}

func f5(a int) int {
	return 5
}

func f6(a int) (r int) {
	return 6
}

func f7(a int) (x int, y float) {
	return 7, 7.0
}


func f8(a int) (x int, y float) {
	return 8, 8.0
}

type T struct {
	x, y int
}

func (t *T) m10(a int, b float) int {
	return (t.x+a) * (t.y+int(b))
}


func f9(a int) (i int, f float) {
	i = 9
	f = 9.0
	return
}


func main() {
	f1()
	f2(1)
	r3 := f3(1, 2)
	assertequal(r3, 3, "3")
	r4 := f4(0, 2, 3.0)
	assertequal(r4, 4, "4")
	r5 := f5(1)
	assertequal(r5, 5, "5")
	r6 := f6(1)
	assertequal(r6, 6, "6")
	r7, s7 := f7(1)
	assertequal(r7, 7, "r7")
	assertequal(int(s7), 7, "s7")
	r8, s8 := f8(1)
	assertequal(r8, 8, "r8")
	assertequal(int(s8), 8, "s8")
	r9, s9 := f9(1)
	assertequal(r9, 9, "r9")
	assertequal(int(s9), 9, "s9")
	var t *T = new(T)
	t.x = 1
	t.y = 2
	r10 := t.m10(1, 3.0)
	assertequal(r10, 10, "10")
}
