aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAyke van Laethem <[email protected]>2024-03-03 20:53:45 +0100
committerRon Evans <[email protected]>2024-05-29 21:51:39 +0200
commitc383a407e337f08831efd196bae708977a393028 (patch)
tree06f40139b0fd94552189d715ff5f64cb1a3328b5
parent7b7601d77c681a3c2ce53ce3f89dbdfc35eec492 (diff)
downloadtinygo-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.c5
-rw-r--r--testdata/cgo/main.go5
-rw-r--r--testdata/cgo/main.h2
-rw-r--r--testdata/cgo/out.txt2
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