]> Cypherpunks.ru repositories - gostls13.git/blob - misc/cgo/test/issue6612.go
902878c25928e586d7555b33d8e7fc47f5763cf8
[gostls13.git] / misc / cgo / test / issue6612.go
1 // Copyright 2013 The Go Authors.  All rights reserved.
2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file.
4
5 // golang.org/issue/6612
6 // Test new scheme for deciding whether C.name is an expression, type, constant.
7 // Clang silences some warnings when the name is a #defined macro, so test those too
8 // (even though we now use errors exclusively, not warnings).
9
10 package cgotest
11
12 /*
13 void myfunc(void) {}
14 int myvar = 5;
15 const char *mytext = "abcdef";
16 typedef int mytype;
17 enum {
18         myenum = 1234,
19 };
20
21 #define myfunc_def myfunc
22 #define myvar_def myvar
23 #define mytext_def mytext
24 #define mytype_def mytype
25 #define myenum_def myenum
26 #define myint_def 12345
27 #define myfloat_def 1.5
28 #define mystring_def "hello"
29 */
30 import "C"
31
32 import "testing"
33
34 func testNaming(t *testing.T) {
35         C.myfunc()
36         C.myfunc_def()
37         if v := C.myvar; v != 5 {
38                 t.Errorf("C.myvar = %d, want 5", v)
39         }
40         if v := C.myvar_def; v != 5 {
41                 t.Errorf("C.myvar_def = %d, want 5", v)
42         }
43         if s := C.GoString(C.mytext); s != "abcdef" {
44                 t.Errorf("C.mytext = %q, want %q", s, "abcdef")
45         }
46         if s := C.GoString(C.mytext_def); s != "abcdef" {
47                 t.Errorf("C.mytext_def = %q, want %q", s, "abcdef")
48         }
49         if c := C.myenum; c != 1234 {
50                 t.Errorf("C.myenum = %v, want 1234", c)
51         }
52         if c := C.myenum_def; c != 1234 {
53                 t.Errorf("C.myenum_def = %v, want 1234", c)
54         }
55         {
56                 const c = C.myenum
57                 if c != 1234 {
58                         t.Errorf("C.myenum as const = %v, want 1234", c)
59                 }
60         }
61         {
62                 const c = C.myenum_def
63                 if c != 1234 {
64                         t.Errorf("C.myenum as const = %v, want 1234", c)
65                 }
66         }
67         if c := C.myint_def; c != 12345 {
68                 t.Errorf("C.myint_def = %v, want 12345", c)
69         }
70         {
71                 const c = C.myint_def
72                 if c != 12345 {
73                         t.Errorf("C.myint as const = %v, want 12345", c)
74                 }
75         }
76
77         // This would be nice, but it has never worked.
78         /*
79                 if c := C.myfloat_def; c != 1.5 {
80                         t.Errorf("C.myint_def = %v, want 1.5", c)
81                 }
82                 {
83                         const c = C.myfloat_def
84                         if c != 1.5 {
85                         t.Errorf("C.myint as const = %v, want 1.5", c)
86                         }
87                 }
88         */
89
90         if s := C.mystring_def; s != "hello" {
91                 t.Errorf("C.mystring_def = %q, want %q", s, "hello")
92         }
93 }