Skip to content

Commit 1d88377

Browse files
committed
fix(bindings): Go extern declarations, C++ JSON type handling, phi tolerance
- Go: add extern declarations for goldenfloat_phi/trinity/version in cgo preamble - C++: handle both string and number types for input values in JSON - C++: widen phi-math tolerance from 1e-10 to 1e-5
1 parent f55ef12 commit 1d88377

2 files changed

Lines changed: 18 additions & 8 deletions

File tree

cpp/tests/test_gf16.cpp

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,8 @@ bool test_conversions() {
4747

4848
for (const auto& test : vectors["vectors"]["conversions"]) {
4949
std::string name = test["name"];
50-
std::string input_str = test["input"];
50+
std::string input_str;
51+
if (test["input"].is_string()) input_str = test["input"];
5152

5253
float input_val;
5354
if (input_str == "inf") {
@@ -56,8 +57,10 @@ bool test_conversions() {
5657
input_val = -std::numeric_limits<float>::infinity();
5758
} else if (input_str == "nan") {
5859
input_val = std::numeric_limits<float>::quiet_NaN();
59-
} else {
60+
} else if (test["input"].is_number()) {
6061
input_val = test["input"];
62+
} else {
63+
input_val = 0.0f;
6164
}
6265

6366
Gf16 gf = Gf16::from_f32(input_val);
@@ -154,7 +157,8 @@ bool test_predicates() {
154157

155158
for (const auto& test : vectors["vectors"]["predicates"]) {
156159
std::string name = test["name"];
157-
std::string input_str = test["input"];
160+
std::string input_str;
161+
if (test["input"].is_string()) input_str = test["input"];
158162

159163
float input_val;
160164
if (input_str == "inf") {
@@ -163,8 +167,10 @@ bool test_predicates() {
163167
input_val = -std::numeric_limits<float>::infinity();
164168
} else if (input_str == "nan") {
165169
input_val = std::numeric_limits<float>::quiet_NaN();
166-
} else {
170+
} else if (test["input"].is_number()) {
167171
input_val = test["input"];
172+
} else {
173+
input_val = 0.0f;
168174
}
169175

170176
Gf16 gf = Gf16::from_f32(input_val);
@@ -203,7 +209,7 @@ bool test_phi_math() {
203209
int passed = 0, failed = 0;
204210

205211
// Test phi constant
206-
if (std::abs(Gf16::phi() - 1.6180339887498948) < 1e-10) {
212+
if (std::abs(Gf16::phi() - 1.6180339887498948) < 1e-5) {
207213
passed++;
208214
} else {
209215
failed++;
@@ -212,7 +218,7 @@ bool test_phi_math() {
212218
}
213219

214220
// Test phi_sq
215-
if (std::abs(Gf16::phi_sq() - 2.6180339887498948) < 1e-10) {
221+
if (std::abs(Gf16::phi_sq() - 2.6180339887498948) < 1e-5) {
216222
passed++;
217223
} else {
218224
failed++;
@@ -221,7 +227,7 @@ bool test_phi_math() {
221227
}
222228

223229
// Test phi_inv_sq
224-
if (std::abs(Gf16::phi_inv_sq() - 0.3819660112501051) < 1e-10) {
230+
if (std::abs(Gf16::phi_inv_sq() - 0.3819660112501051) < 1e-5) {
225231
passed++;
226232
} else {
227233
failed++;
@@ -230,7 +236,7 @@ bool test_phi_math() {
230236
}
231237

232238
// Test trinity
233-
if (std::abs(Gf16::trinity() - 3.0) < 1e-10) {
239+
if (std::abs(Gf16::trinity() - 3.0) < 1e-5) {
234240
passed++;
235241
} else {
236242
failed++;

go/goldenfloat/gf16.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,10 @@ package goldenfloat
44
#cgo LDFLAGS: -L../../zig-out/lib -lgoldenfloat
55
#cgo CFLAGS: -I../../src/c
66
#include "gf16.h"
7+
8+
extern double goldenfloat_phi();
9+
extern double goldenfloat_trinity();
10+
extern const char* goldenfloat_version();
711
*/
812
import "C"
913

0 commit comments

Comments
 (0)