// $G $D/$F.go && $L $F.$A && ./$A.out || echo BUG interface6

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

// Interface values containing structures.

package main

import "os"

var fail int

func check(b bool, msg string) {
  if (!b) {
    println("failure in", msg);
    fail++;
  }
}

type I1 interface { Get() int; Put(int); }

type S1 struct { i int }
func (p S1) Get() int { return p.i }
func (p S1) Put(i int) { p.i = i }

func f1() {
  s := S1{1};
  var i I1 = s;
  i.Put(2);
  check(i.Get() == 1, "f1 i");
  check(s.i == 1, "f1 s");
}

func f2() {
  s := S1{1};
  var i I1 = &s;
  i.Put(2);
  check(i.Get() == 1, "f2 i");
  check(s.i == 1, "f2 s");
}

func f3() {
  s := &S1{1};
  var i I1 = s;
  i.Put(2);
  check(i.Get() == 1, "f3 i");
  check(s.i == 1, "f3 s");
}

type S2 struct { i int }
func (p *S2) Get() int { return p.i }
func (p *S2) Put(i int) { p.i = i }

// func f4() {
//   s := S2{1};
//   var i I1 = s;
//   i.Put(2);
//   check(i.Get() == 2, "f4 i");
//   check(s.i == 1, "f4 s");
// }

func f5() {
  s := S2{1};
  var i I1 = &s;
  i.Put(2);
  check(i.Get() == 2, "f5 i");
  check(s.i == 2, "f5 s");
}

func f6() {
  s := &S2{1};
  var i I1 = s;
  i.Put(2);
  check(i.Get() == 2, "f6 i");
  check(s.i == 2, "f6 s");
}

type I2 interface { Get() int64; Put(int64); }

type S3 struct { i, j, k, l int64 }
func (p S3) Get() int64 { return p.l }
func (p S3) Put(i int64) { p.l = i }

func f7() {
  s := S3{1, 2, 3, 4};
  var i I2 = s;
  i.Put(5);
  check(i.Get() == 4, "f7 i");
  check(s.l == 4, "f7 s");
}

func f8() {
  s := S3{1, 2, 3, 4};
  var i I2 = &s;
  i.Put(5);
  check(i.Get() == 4, "f8 i");
  check(s.l == 4, "f8 s");
}

func f9() {
  s := &S3{1, 2, 3, 4};
  var i I2 = s;
  i.Put(5);
  check(i.Get() == 4, "f9 i");
  check(s.l == 4, "f9 s");
}

type S4 struct { i, j, k, l int64 }
func (p *S4) Get() int64 { return p.l }
func (p *S4) Put(i int64) { p.l = i }

// func f10() {
//   s := S4{1, 2, 3, 4};
//   var i I2 = s;
//   i.Put(5);
//   check(i.Get() == 5, "f10 i");
//   check(s.l == 4, "f10 s");
// }

func f11() {
  s := S4{1, 2, 3, 4};
  var i I2 = &s;
  i.Put(5);
  check(i.Get() == 5, "f11 i");
  check(s.l == 5, "f11 s");
}

func f12() {
  s := &S4{1, 2, 3, 4};
  var i I2 = s;
  i.Put(5);
  check(i.Get() == 5, "f12 i");
  check(s.l == 5, "f12 s");
}

func main() {
  f1();
  f2();
  f3();
//  f4();
  f5();
  f6();
  f7();
  f8();
  f9();
//  f10();
  f11();
  f12();
  if fail > 0 {
    os.Exit(1)
  }
}
