// $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

type S struct
{
	a,b	int;
}

type I1 interface
{
	f	()int;
}

type I2 interface
{
	g,f	()int;
}

func
(this *S) f()int
{
	return this.a;
}

func
(this *S) g()int
{
	return this.b;
}

func
main()
{
	var i1 I1;
	var i2 I2;
	var g *S;

	s := new(S);
	s.a = 5;
	s.b = 6;

	// call structure
	if s.f() != 5 { panic 11; }
	if s.g() != 6 { panic 12; }

	i1 = s;		// convert S to I1
	i2 = i1;	// convert I1 to I2

	// call interface
	if i1.f() != 5 { panic 21; }
	if i2.f() != 5 { panic 22; }
	if i2.g() != 6 { panic 23; }

	g = i1;		// convert I1 to S
	if g != s { panic 31; }

	g = i2;		// convert I2 to S
	if g != s { panic 32; }
}
