|  | // 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) | 
|  | } | 
|  | } |