diff options
author | Ayke van Laethem <[email protected]> | 2024-03-03 20:53:45 +0100 |
---|---|---|
committer | Ron Evans <[email protected]> | 2024-05-29 21:51:39 +0200 |
commit | c383a407e337f08831efd196bae708977a393028 (patch) | |
tree | 06f40139b0fd94552189d715ff5f64cb1a3328b5 | |
parent | 7b7601d77c681a3c2ce53ce3f89dbdfc35eec492 (diff) | |
download | tinygo-c383a407e337f08831efd196bae708977a393028.tar.gz tinygo-c383a407e337f08831efd196bae708977a393028.zip |
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.
-rw-r--r-- | testdata/cgo/main.c | 5 | ||||
-rw-r--r-- | testdata/cgo/main.go | 5 | ||||
-rw-r--r-- | testdata/cgo/main.h | 2 | ||||
-rw-r--r-- | testdata/cgo/out.txt | 2 |
4 files changed, 14 insertions, 0 deletions
diff --git a/testdata/cgo/main.c b/testdata/cgo/main.c index 31b60704f..7fb702ed6 100644 --- a/testdata/cgo/main.c +++ b/testdata/cgo/main.c @@ -1,3 +1,4 @@ +#include <math.h> #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 aac5221f4..fa3380bce 100644 --- a/testdata/cgo/main.go +++ b/testdata/cgo/main.go @@ -2,6 +2,7 @@ package main /* #include <stdio.h> +#include <math.h> 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 702dab0c0..f5405ade6 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 781187b50..ae92c87a7 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 |