Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

cgo: do a basic test that math functions work #4172

Merged
merged 1 commit into from
May 29, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
Loading