// $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");
}
