Skip to content

Commit f85da59

Browse files
committed
Finish test suite, with corrections for bugs discovered
1 parent 0131908 commit f85da59

File tree

6 files changed

+500
-27
lines changed

6 files changed

+500
-27
lines changed

srfi/250/hash-tables.scm

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -667,23 +667,25 @@
667667
ht))
668668

669669
(define (hash-table-prune! proc ht)
670+
(define original-size (hash-table-size ht))
670671
(unless (hash-table-mutable? ht)
671672
(assertion-violation 'hash-table-prune!
672673
"hash table is immutable"
673674
ht))
674675
(let loop ((cur (hash-table-cursor-first ht)) (n-deleted 0))
675676
(if (hash-table-cursor-at-end? ht cur)
676677
(begin
677-
(hash-table-size-set! ht (- (hash-table-size ht) n-deleted))
678678
(hash-table-prune-dead-entries-at-end! ht)
679-
(when (> (- (hash-table-next-entry ht) (hash-table-size ht))
679+
(when (> (- (hash-table-next-entry ht) original-size)
680680
(* 1/3 (hash-table-size ht)))
681681
(hash-table-prune-dead-entries! ht #f))
682682
n-deleted)
683683
(let-values (((k v) (hash-table-cursor-key+value ht cur)))
684684
(if (and (proc k v)
685685
(hash-table-delete-one! ht k))
686-
(loop (hash-table-cursor-next ht cur) (+ n-deleted 1))
686+
(begin
687+
(hash-table-size-set! ht (- (hash-table-size ht) 1))
688+
(loop (hash-table-cursor-next ht cur) (+ n-deleted 1)))
687689
(loop (hash-table-cursor-next ht cur) n-deleted))))))
688690

689691
(define (hash-table-copy ht mutable?)
@@ -711,7 +713,7 @@
711713
(hash-table-for-each
712714
(lambda (k v)
713715
(unless (hash-table-contains? ht_1 k)
714-
(hash-table-set! ht_2 k v)))
716+
(hash-table-set! ht_1 k v)))
715717
ht_2)
716718
ht_1)
717719

srfi/250/internal/srfi-compact-arrays.scm

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -63,22 +63,30 @@
6363
(let ((out (make-u8vector len)))
6464
(let loop ((idx 0))
6565
(when (< idx len)
66-
(u8vector-set! out idx (u8vector-ref sa idx))))))
66+
(u8vector-set! out idx (u8vector-ref sa idx))
67+
(loop (+ idx 1))))
68+
out))
6769
((u16vector? sa)
6870
(let ((out (make-u16vector len)))
6971
(let loop ((idx 0))
7072
(when (< idx len)
71-
(u16vector-set! out idx (u16vector-ref sa idx))))))
73+
(u16vector-set! out idx (u16vector-ref sa idx))
74+
(loop (+ idx 1))))
75+
out))
7276
((u32vector? sa)
7377
(let ((out (make-u32vector len)))
7478
(let loop ((idx 0))
7579
(when (< idx len)
76-
(u32vector-set! out idx (u32vector-ref sa idx))))))
80+
(u32vector-set! out idx (u32vector-ref sa idx))
81+
(loop (+ idx 1))))
82+
out))
7783
((u64vector? sa)
7884
(let ((out (make-u64vector len)))
7985
(let loop ((idx 0))
8086
(when (< idx len)
81-
(u64vector-set! out idx (u64vector-ref sa idx))))))))
87+
(u64vector-set! out idx (u64vector-ref sa idx))
88+
(loop (+ idx 1))))
89+
out))))
8290

8391
(define (compact-array-length sa)
8492
(cond ((u8vector? sa)

test-on-guile.scm

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
(rnrs r5rs)
33
(chibi test)
44
(only (srfi :1) list-tabulate)
5+
(srfi :6)
56
(srfi :27)
67
(srfi :128)
78
(srfi :250)

test-on-r6rs.sps

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
(rnrs r5rs)
33
(chibi test)
44
(only (srfi :1) list-tabulate)
5+
(srfi :6)
56
(srfi :27)
67
(srfi :128)
78
(srfi :250)

test-on-r7rs.scm

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
(import (scheme base)
22
(scheme char)
3+
(scheme write)
34
(chibi test)
45
(only (srfi 1) list-tabulate)
56
(srfi 27)
@@ -10,6 +11,8 @@
1011
(define-syntax assert
1112
(syntax-rules ()
1213
((_ what) (unless what (error "assertion failed")))))
14+
(define (assertion-violation who msg . rest)
15+
(apply error msg rest))
1316
(define assertion-violation? error-object?)
1417

1518
(test-begin "SRFI 250")

0 commit comments

Comments
 (0)