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)