From d365d5abb55e4132068cb0faa10b806175d17a1e Mon Sep 17 00:00:00 2001 From: Ayke van Laethem Date: Sun, 3 Mar 2024 20:53:45 +0100 Subject: [PATCH] cgo: do a basic test that math functions work They should, but we weren't testing this. I discovered this while working on https://github.com/tinygo-org/macos-minimal-sdk/pull/4 which will likely make math.h not work anymore. So I wanted to make sure we have a test in place before we update that dependency. --- testdata/cgo/main.c | 5 +++++ testdata/cgo/main.go | 5 +++++ testdata/cgo/main.h | 2 ++ testdata/cgo/out.txt | 2 ++ 4 files changed, 14 insertions(+) diff --git a/testdata/cgo/main.c b/testdata/cgo/main.c index 31b60704f5..7fb702ed67 100644 --- a/testdata/cgo/main.c +++ b/testdata/cgo/main.c @@ -1,3 +1,4 @@ +#include #include "main.h" int global = 3; @@ -67,3 +68,7 @@ void unionSetData(short f0, short f1, short f2) { void arraydecay(int buf1[5], int buf2[3][8], int buf3[4][7][2]) { // Do nothing. } + +double doSqrt(double x) { + return sqrt(x); +} diff --git a/testdata/cgo/main.go b/testdata/cgo/main.go index aac5221f42..fa3380bcea 100644 --- a/testdata/cgo/main.go +++ b/testdata/cgo/main.go @@ -2,6 +2,7 @@ package main /* #include +#include int fortytwo(void); #include "main.h" #include "test.h" @@ -171,6 +172,10 @@ func main() { C.strcpy((*C.char)(unsafe.Pointer(&buf2[0])), (*C.char)(unsafe.Pointer(&buf1[0]))) println("copied string:", string(buf2[:C.strlen((*C.char)(unsafe.Pointer(&buf2[0])))])) + // libc: test libm functions (normally bundled in libc) + println("CGo sqrt(3):", C.sqrt(3)) + println("C sqrt(3):", C.doSqrt(3)) + // libc: test basic stdio functionality putsBuf := []byte("line written using C puts\x00") C.puts((*C.char)(unsafe.Pointer(&putsBuf[0]))) diff --git a/testdata/cgo/main.h b/testdata/cgo/main.h index 702dab0c00..f5405ade62 100644 --- a/testdata/cgo/main.h +++ b/testdata/cgo/main.h @@ -150,3 +150,5 @@ extern int global; // Test array decaying into a pointer. typedef int arraydecay_buf3[4][7][2]; void arraydecay(int buf1[5], int buf2[3][8], arraydecay_buf3 buf3); + +double doSqrt(double); diff --git a/testdata/cgo/out.txt b/testdata/cgo/out.txt index 781187b50c..ae92c87a7c 100644 --- a/testdata/cgo/out.txt +++ b/testdata/cgo/out.txt @@ -74,4 +74,6 @@ C.GoString(nil): len(C.GoStringN(nil, 0)): 0 len(C.GoBytes(nil, 0)): 0 copied string: foobar +CGo sqrt(3): +1.732051e+000 +C sqrt(3): +1.732051e+000 line written using C puts