// $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() int;
	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.(I2);	// 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.(*S);		// convert I1 to S
	if g != s { panic(31); }

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