shithub: sl

Download patch

ref: 17bc29d342073a9cf32c2b684009d18ef4eb1864
parent: 96e08ec043ae59e7eec6707c9d410caa7fd114a5
author: Sigrid Solveig Haflínudóttir <sigrid@ftrv.se>
date: Wed Apr 30 23:40:57 EDT 2025

test all number constructors allowing no arguments; no-argument (rune) will return invalid rune

--- a/src/builtins.c
+++ b/src/builtins.c
@@ -291,6 +291,8 @@
 
 BUILTIN("fixnum", fixnum)
 {
+	if(nargs == 0)
+		return fixnum(0);
 	argcount(nargs, 1);
 	sl_v v = args[0];
 	if(isfixnum(v))
--- a/src/cvalues.c
+++ b/src/cvalues.c
@@ -255,7 +255,7 @@
 BUILTIN("rune", rune)
 {
 	if(nargs == 0){
-		PUSH(fixnum(0));
+		PUSH(fixnum(Runeerror));
 		args = sl.sp-1;
 	}else
 		argcount(nargs, 1);
--- a/test/unittest.sl
+++ b/test/unittest.sl
@@ -22,9 +22,9 @@
 (assert (= 3 unbound-var))
 (assert (equal? (cons 1 0) (f)))
 
-(def (every-int n)
-  (list (fixnum n) (s8 n) (u8 n) (s16 n) (u16 n) (s32 n) (u32 n)
-        (p32 n) (s64 n) (u64 n) (p64 n) (f32 n) (f64 n) (bignum n)))
+(defmacro (every-int . n)
+  `(list (fixnum ,@n) (s8 ,@n) (u8 ,@n) (s16 ,@n) (u16 ,@n) (s32 ,@n) (u32 ,@n)
+         (p32 ,@n) (s64 ,@n) (u64 ,@n) (p64 ,@n) (f32 ,@n) (f64 ,@n) (bignum ,@n)))
 
 (def (every-sint n)
   (list (fixnum n) (s8 n) (s16 n) (s32 n) (s64 n) (f32 n) (f64 n) (bignum n)))
@@ -58,6 +58,7 @@
 (test-lt (every-int 0) (every-int 1))
 (test-eq (every-int 88) (every-int 88))
 (test-eq (every-sint -88) (every-sint -88))
+(assert (every (λ (x) (= x 0)) (every-int)))
 
 (def (test-square a)
   (each (λ (i) (eval `(assert (>= (* ,i ,i) 0))))
@@ -789,6 +790,8 @@
 (assert (rune-title-case? #\Dž))
 
 (assert-fail (rune ""))
+(assert-fail (rune 'a))
+(assert (rune))
 
 (def s "hello й goodbye")
 (assert (= 4 (str-find s #\o)))