shithub: sl

Download patch

ref: 7173a2e6c908782254b45972d5b2025fa523ac24
parent: a805e16b52d1fe06d6ce7ca865be3153473fdb28
author: Sigrid Solveig Haflínudóttir <sigrid@ftrv.se>
date: Sun Feb 2 20:23:49 EST 2025

more tests and a bit of cleanup

--- a/src/flisp.c
+++ b/src/flisp.c
@@ -674,15 +674,11 @@
 bool
 fl_isnumber(value_t v)
 {
-	if(isfixnum(v))
+	if(isfixnum(v) || ismpint(v))
 		return true;
 	if(iscprim(v)){
 		cprim_t *c = ptr(v);
 		return c->type != FL(runetype) && valid_numtype(c->type->numtype);
-	}
-	if(iscvalue(v)){
-		cvalue_t *c = ptr(v);
-		return valid_numtype(cp_numtype(c));
 	}
 	return false;
 }
--- a/src/table.c
+++ b/src/table.c
@@ -110,11 +110,7 @@
 		else
 			k = arg;
 	}
-	if(h->table != &h->_space[0] && cnt <= HT_N_INLINE){
-		cvalue_t *cv = ptr(nt);
-		add_finalizer(cv);
-		cv->len = sizeof(htable_t) - inline_space;
-	}
+	assert(h->table == &h->_space[0] || cnt > HT_N_INLINE);
 	return nt;
 }
 
--- a/test/number-boundaries.lsp
+++ b/test/number-boundaries.lsp
@@ -63,9 +63,11 @@
   `(let* ((h (high-border ,smaller))
           (L (low-border ,bigger))
           (l (if (= L 0) 0 (low-border ,smaller))))
-     (assert (and (integer? h) (integer? l)))
+     (assert (and (integer? h) (integer? l) (number? h) (number? l)))
+     (assert (and (number? (,smaller h)) (number? (,smaller l))))
      (assert (and (integer? (,smaller h)) (integer? (,smaller l))))
      (assert (and (integer? (,bigger h)) (integer? (,bigger l))))
+     (assert (and (number? (,bigger h)) (number? (,bigger l))))
      (assert (and (integer-valued? h) (integer-valued? l)))
      (assert (and (integer-valued? (,smaller h)) (integer-valued? (,smaller l))))
      (assert (and (integer-valued? (,bigger h)) (integer-valued? (,bigger l))))
--- a/test/unittest.lsp
+++ b/test/unittest.lsp
@@ -401,6 +401,7 @@
 (define a '(1))
 (set-cdr! a a)
 (assert (equal? (length a) +inf.0))
+(eq? (cdr a) a)
 
 ;; unbinding
 (define abc 1)
@@ -589,6 +590,12 @@
 (assert (integer-valued? -1.0f))
 (assert (integer-valued? (bignum 0)))
 
+(assert (number? 1.3))
+(assert (number? -1.3))
+(assert (number? 1.3f))
+(assert (number? -1.3f))
+(assert (not (number? #\я)))
+
 (assert (integer? 0))
 (assert (integer? (bignum 0)))
 
@@ -624,6 +631,9 @@
 (assert-fail (table 1))
 (assert-fail (table 1 2 3))
 (define t (table 1 2 "3" 4 'foo 'bar))
+(let ((b (buffer)))
+  (write t b)
+  (assert (equal? (iostream->string b) "#table(1 2  \"3\" 4  foo bar)")))
 (assert (table? t))
 (assert (not (table? "nope")))
 (assert-fail (get t 3))
@@ -633,12 +643,32 @@
 (assert (= 4 (get t "3")))
 
 (assert (has? t 'foo))
-(assert (equal? 'bar (get t 'foo)))
-(assert (equal? t (del! t 'foo)))
+(assert (eq? 'bar (get t 'foo)))
+(assert (eq? t (del! t 'foo)))
 (assert (not (has? t 'foo)))
 (assert-fail (get t 'foo))
 (assert-fail (del! t 'foo))
 
+(assert (equal? (list 1 1 1) #0=(list 1 #1=1 #1#)))
+
+(assert-fail (sleep 1 2))
+(sleep)
+(sleep 0)
+(gc)
+
+(let ((ruint32 (table))
+      (ruint64 (table))
+      (rdouble (table))
+      (rfloat (table)))
+  (dotimes (i 100)
+    (put! ruint32 (rand-uint32) 1)
+    (put! ruint64 (rand-uint64) 1)
+    (put! rdouble (rand-double) 1)
+    (put! rfloat (rand-float) 1))
+  (assert (< 50 (length ruint32)))
+  (assert (< 50 (length ruint64)))
+  (assert (< 50 (length rdouble)))
+  (assert (< 50 (length rfloat))))
 
 (princ "all tests pass")
 (newline)