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