// Copyright 2011 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.

package cgotest

import "testing"

// The actual test functions are in non-_test.go files
// so that they can use cgo (import "C").
// These wrappers are here for gotest to find.

func Test1328(t *testing.T)                  { test1328(t) }
func Test1635(t *testing.T)                  { test1635(t) }
func Test3250(t *testing.T)                  { test3250(t) }
func Test3729(t *testing.T)                  { test3729(t) }
func Test3775(t *testing.T)                  { test3775(t) }
func Test4029(t *testing.T)                  { test4029(t) }
func Test4339(t *testing.T)                  { test4339(t) }
func Test5227(t *testing.T)                  { test5227(t) }
func Test5242(t *testing.T)                  { test5242(t) }
func Test5337(t *testing.T)                  { test5337(t) }
func Test5548(t *testing.T)                  { test5548(t) }
func Test5603(t *testing.T)                  { test5603(t) }
func Test5986(t *testing.T)                  { test5986(t) }
func Test6390(t *testing.T)                  { test6390(t) }
func Test6833(t *testing.T)                  { test6833(t) }
func Test6907(t *testing.T)                  { test6907(t) }
func Test6907Go(t *testing.T)                { test6907Go(t) }
func Test7560(t *testing.T)                  { test7560(t) }
func Test7665(t *testing.T)                  { test7665(t) }
func Test7978(t *testing.T)                  { test7978(t) }
func Test8092(t *testing.T)                  { test8092(t) }
func Test8517(t *testing.T)                  { test8517(t) }
func Test8694(t *testing.T)                  { test8694(t) }
func Test8811(t *testing.T)                  { test8811(t) }
func Test9557(t *testing.T)                  { test9557(t) }
func Test10303(t *testing.T)                 { test10303(t, 10) }
func Test11925(t *testing.T)                 { test11925(t) }
func Test12030(t *testing.T)                 { test12030(t) }
func Test14838(t *testing.T)                 { test14838(t) }
func Test17065(t *testing.T)                 { test17065(t) }
func Test17537(t *testing.T)                 { test17537(t) }
func Test18126(t *testing.T)                 { test18126(t) }
func Test18720(t *testing.T)                 { test18720(t) }
func Test20129(t *testing.T)                 { test20129(t) }
func Test20369(t *testing.T)                 { test20369(t) }
func Test20910(t *testing.T)                 { test20910(t) }
func Test21708(t *testing.T)                 { test21708(t) }
func Test21809(t *testing.T)                 { test21809(t) }
func Test21897(t *testing.T)                 { test21897(t) }
func Test22906(t *testing.T)                 { test22906(t) }
func Test23356(t *testing.T)                 { test23356(t) }
func Test24206(t *testing.T)                 { test24206(t) }
func Test25143(t *testing.T)                 { test25143(t) }
func Test26066(t *testing.T)                 { test26066(t) }
func Test27660(t *testing.T)                 { test27660(t) }
func Test28896(t *testing.T)                 { test28896(t) }
func Test30065(t *testing.T)                 { test30065(t) }
func Test32579(t *testing.T)                 { test32579(t) }
func TestAlign(t *testing.T)                 { testAlign(t) }
func TestAtol(t *testing.T)                  { testAtol(t) }
func TestBlocking(t *testing.T)              { testBlocking(t) }
func TestBoolAlign(t *testing.T)             { testBoolAlign(t) }
func TestCallGoWithString(t *testing.T)      { testCallGoWithString(t) }
func TestCallback(t *testing.T)              { testCallback(t) }
func TestCallbackCallers(t *testing.T)       { testCallbackCallers(t) }
func TestCallbackGC(t *testing.T)            { testCallbackGC(t) }
func TestCallbackPanic(t *testing.T)         { testCallbackPanic(t) }
func TestCallbackPanicLocked(t *testing.T)   { testCallbackPanicLocked(t) }
func TestCallbackPanicLoop(t *testing.T)     { testCallbackPanicLoop(t) }
func TestCallbackStack(t *testing.T)         { testCallbackStack(t) }
func TestCflags(t *testing.T)                { testCflags(t) }
func TestCheckConst(t *testing.T)            { testCheckConst(t) }
func TestConst(t *testing.T)                 { testConst(t) }
func TestCthread(t *testing.T)               { testCthread(t) }
func TestEnum(t *testing.T)                  { testEnum(t) }
func TestErrno(t *testing.T)                 { testErrno(t) }
func TestFpVar(t *testing.T)                 { testFpVar(t) }
func TestHelpers(t *testing.T)               { testHelpers(t) }
func TestLibgcc(t *testing.T)                { testLibgcc(t) }
func TestMultipleAssign(t *testing.T)        { testMultipleAssign(t) }
func TestNaming(t *testing.T)                { testNaming(t) }
func TestPanicFromC(t *testing.T)            { testPanicFromC(t) }
func TestParallelSleep(t *testing.T)         { testParallelSleep(t) }
func TestPrintf(t *testing.T)                { testPrintf(t) }
func TestReturnAfterGrow(t *testing.T)       { testReturnAfterGrow(t) }
func TestReturnAfterGrowFromGo(t *testing.T) { testReturnAfterGrowFromGo(t) }
func TestSetEnv(t *testing.T)                { testSetEnv(t) }
func TestThreadLock(t *testing.T)            { testThreadLockFunc(t) }
func TestUnsignedInt(t *testing.T)           { testUnsignedInt(t) }
func TestZeroArgCallback(t *testing.T)       { testZeroArgCallback(t) }

func BenchmarkCgoCall(b *testing.B)  { benchCgoCall(b) }
func BenchmarkGoString(b *testing.B) { benchGoString(b) }
