summaryrefslogtreecommitdiff
path: root/src/test/java/com/seaofnodes/simple/progs/floatToInteger.c
diff options
context:
space:
mode:
authorCliff Click <cliffc@acm.org>2026-08-10 11:11:18 -0700
committerCliff Click <cliffc@acm.org>2026-10-08 16:52:27 -0700
commitd32f97238c903765dec4e9a9f3cbfa5fd12cded6 (patch)
treea5ac731801ef7066bab6359c4e85c2bdd20082a6 /src/test/java/com/seaofnodes/simple/progs/floatToInteger.c
parentb5ebb2032aa04cf4506d533127d373d4cf5a25c6 (diff)
downloadSimple-linear.tar.gz
Simple-linear.zip
Chapter 25: Modules, Separate Compilation, and SSA Constructionlinear
Co-authored-by: Hsiang-Ying Fu <66062782+fuhsnn@users.noreply.github.com> Co-authored-by: fuhsnn <66062782+fuhsnn@users.noreply.github.com> Co-authored-by: Symious <14933944+symious@users.noreply.github.com> Co-authored-by: Jun Kawasaki <jun784@gmail.com> Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
Diffstat (limited to 'src/test/java/com/seaofnodes/simple/progs/floatToInteger.c')
-rw-r--r--src/test/java/com/seaofnodes/simple/progs/floatToInteger.c25
1 files changed, 25 insertions, 0 deletions
diff --git a/src/test/java/com/seaofnodes/simple/progs/floatToInteger.c b/src/test/java/com/seaofnodes/simple/progs/floatToInteger.c
new file mode 100644
index 00000000..cf9390d8
--- /dev/null
+++ b/src/test/java/com/seaofnodes/simple/progs/floatToInteger.c
@@ -0,0 +1,25 @@
+#include <stdint.h>
+#include <math.h>
+#include <stdio.h>
+
+extern int64_t float_to_int(double);
+extern int64_t float_to_u8(double);
+
+int main(void) {
+ double values[] = {0.0,-0.0,6.92,-6.92,0.99,-0.99,255.75,-257.75,
+ 0x1p63,0x1.fffffffffffffp62,-0x1p63,-0x1.0000000000001p63,
+ INFINITY,-INFINITY,NAN,-NAN};
+ for( unsigned i=0; i<sizeof(values)/sizeof(values[0]); i++ ) {
+ double x=values[i];
+ int64_t expected=isnan(x) ? 0 : x>=0x1p63 ? INT64_MAX
+ : x<=-0x1p63 ? INT64_MIN : (int64_t)x;
+ int64_t actual=float_to_int(x), narrow=float_to_u8(x);
+ if( actual!=expected || narrow!=(expected&255) ) {
+ fprintf(stderr,"conversion of %g: got %lld / %lld, expected %lld / %lld\n",
+ x,(long long)actual,(long long)narrow,
+ (long long)expected,(long long)(expected&255));
+ return 1;
+ }
+ }
+ return 0;
+}