1// run
2
3// Copyright 2009 The Go Authors. All rights reserved.
4// Use of this source code is governed by a BSD-style
5// license that can be found in the LICENSE file.
6
7// Test interfaces on basic types.
8
9package main
10
11type myint int
12type mystring string
13type I0 interface{}
14
15func f() {
16	var ia, ib I0
17	var i myint
18	var s mystring
19
20	if ia != ib {
21		panic("1")
22	}
23
24	i = 1
25	ia = i
26	ib = i
27	if ia != ib {
28		panic("2")
29	}
30	if ia == nil {
31		panic("3")
32	}
33
34	i = 2
35	ia = i
36	if ia == ib {
37		panic("4")
38	}
39
40	ia = nil
41	if ia == ib {
42		panic("5")
43	}
44
45	ib = nil
46	if ia != ib {
47		panic("6")
48	}
49
50	if ia != nil {
51		panic("7")
52	}
53
54	s = "abc"
55	ia = s
56	ib = nil
57	if ia == ib {
58		panic("8")
59	}
60
61	s = "def"
62	ib = s
63	if ia == ib {
64		panic("9")
65	}
66
67	s = "abc"
68	ib = s
69	if ia != ib {
70		panic("a")
71	}
72}
73
74func main() {
75	var ia [20]I0
76	var b bool
77	var s string
78	var i8 int8
79	var i16 int16
80	var i32 int32
81	var i64 int64
82	var u8 uint8
83	var u16 uint16
84	var u32 uint32
85	var u64 uint64
86
87	f()
88
89	ia[0] = "xxx"
90	ia[1] = 12345
91	ia[2] = true
92
93	s = "now is"
94	ia[3] = s
95	b = false
96	ia[4] = b
97
98	i8 = 29
99	ia[5] = i8
100	i16 = 994
101	ia[6] = i16
102	i32 = 3434
103	ia[7] = i32
104	i64 = 1234567
105	ia[8] = i64
106
107	u8 = 12
108	ia[9] = u8
109	u16 = 799
110	ia[10] = u16
111	u32 = 4455
112	ia[11] = u32
113	u64 = 765432
114	ia[12] = u64
115
116	s = ia[0].(string)
117	if s != "xxx" {
118		println(0, s)
119		panic("fail")
120	}
121	i32 = int32(ia[1].(int))
122	if i32 != 12345 {
123		println(1, i32)
124		panic("fail")
125	}
126	b = ia[2].(bool)
127	if b != true {
128		println(2, b)
129		panic("fail")
130	}
131
132	s = ia[3].(string)
133	if s != "now is" {
134		println(3, s)
135		panic("fail")
136	}
137	b = ia[4].(bool)
138	if b != false {
139		println(4, b)
140		panic("fail")
141	}
142
143	i8 = ia[5].(int8)
144	if i8 != 29 {
145		println(5, i8)
146		panic("fail")
147	}
148	i16 = ia[6].(int16)
149	if i16 != 994 {
150		println(6, i16)
151		panic("fail")
152	}
153	i32 = ia[7].(int32)
154	if i32 != 3434 {
155		println(7, i32)
156		panic("fail")
157	}
158	i64 = ia[8].(int64)
159	if i64 != 1234567 {
160		println(8, i64)
161		panic("fail")
162	}
163
164	u8 = ia[9].(uint8)
165	if u8 != 12 {
166		println(5, u8)
167		panic("fail")
168	}
169	u16 = ia[10].(uint16)
170	if u16 != 799 {
171		println(6, u16)
172		panic("fail")
173	}
174	u32 = ia[11].(uint32)
175	if u32 != 4455 {
176		println(7, u32)
177		panic("fail")
178	}
179	u64 = ia[12].(uint64)
180	if u64 != 765432 {
181		println(8, u64)
182		panic("fail")
183	}
184}
185