Skip to content

Commit

Permalink
cgo: do a basic test that math functions work
Browse files Browse the repository at this point in the history
They should, but we weren't testing this.
I discovered this while working on
tinygo-org/macos-minimal-sdk#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.
  • Loading branch information
aykevl committed May 25, 2024
1 parent 1d9f26c commit d365d5a
Show file tree
Hide file tree
Showing 4 changed files with 14 additions and 0 deletions.
5 changes: 5 additions & 0 deletions testdata/cgo/main.c
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
#include <math.h>
#include "main.h"

int global = 3;
Expand Down Expand Up @@ -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);
}
5 changes: 5 additions & 0 deletions testdata/cgo/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package main

/*
#include <stdio.h>
#include <math.h>
int fortytwo(void);
#include "main.h"
#include "test.h"
Expand Down Expand Up @@ -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])))
Expand Down
2 changes: 2 additions & 0 deletions testdata/cgo/main.h
Original file line number Diff line number Diff line change
Expand Up @@ -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);
2 changes: 2 additions & 0 deletions testdata/cgo/out.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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

0 comments on commit d365d5a

Please sign in to comment.