// $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 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 float64) 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 float64) {
	return 7, 7.0
}


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

type T struct {
	x, y int
}

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


func f9(a int) (in int, fl float64) {
	i := 9
	f := float64(9)
	return i, f
}


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")
	var r7 int
	var s7 float64
	r7, s7 = f7(1)
	assertequal(r7, 7, "r7")
	assertequal(int(s7), 7, "s7")
	var r8 int
	var s8 float64
	r8, s8 = f8(1)
	assertequal(r8, 8, "r8")
	assertequal(int(s8), 8, "s8")
	var r9 int
	var s9 float64
	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")
}
