| // Copyright 2013 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. |
| |
| // This file contains test cases for cgo with function pointer variables. |
| |
| package cgotest |
| |
| /* |
| typedef int (*intFunc) (); |
| |
| int |
| bridge_int_func(intFunc f) |
| { |
| return f(); |
| } |
| |
| int fortytwo() |
| { |
| return 42; |
| } |
| |
| */ |
| import "C" |
| import "testing" |
| |
| func callBridge(f C.intFunc) int { |
| return int(C.bridge_int_func(f)) |
| } |
| |
| func callCBridge(f C.intFunc) C.int { |
| return C.bridge_int_func(f) |
| } |
| |
| func testFpVar(t *testing.T) { |
| const expected = 42 |
| f := C.intFunc(C.fortytwo) |
| res1 := C.bridge_int_func(f) |
| if r1 := int(res1); r1 != expected { |
| t.Errorf("got %d, want %d", r1, expected) |
| } |
| res2 := callCBridge(f) |
| if r2 := int(res2); r2 != expected { |
| t.Errorf("got %d, want %d", r2, expected) |
| } |
| r3 := callBridge(f) |
| if r3 != expected { |
| t.Errorf("got %d, want %d", r3, expected) |
| } |
| } |