// $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 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) (in int, fl float) {
	i := 9;
	f := float(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 float;
	r7, s7 = f7(1);
	assertequal(r7, 7, "r7");
	assertequal(int(s7), 7, "s7");
	var r8 int;
	var s8 float;
	r8, s8 = f8(1);
	assertequal(r8, 8, "r8");
	assertequal(int(s8), 8, "s8");
	var r9 int;
	var s9 float;
	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");
}
