Skip to content

Commit 8f0b16a

Browse files
committed
add vector tests
1 parent 1595656 commit 8f0b16a

File tree

3 files changed

+50
-3
lines changed

3 files changed

+50
-3
lines changed

src/kernel.min

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -896,12 +896,16 @@
896896
;; --------------------------------------------------------
897897
;; Vectors
898898

899-
(export vector-length
899+
(export vector
900+
vector-length
900901
vector-ref
901902
vector-set!
902903
vector->list
903904
list->vector)
904905

906+
(define (vector . xs)
907+
($list->vector xs))
908+
905909
(define (non-vector-error name x)
906910
(raise-argument-error name "vector?" x))
907911

@@ -932,4 +936,4 @@
932936
(define (list->vector xs)
933937
(unless (list? xs)
934938
(non-vector-error 'list->vector xs))
935-
($list->vector v))
939+
($list->vector xs))

tests/kernel.c

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -326,6 +326,37 @@ int test_list(void) {
326326
return passed;
327327
}
328328

329+
int test_vector(void) {
330+
passed = 1;
331+
332+
check_equal("(vector)", "#()");
333+
check_equal("(vector 1)", "#(1)");
334+
check_equal("(vector 1 2 3)", "#(1 2 3)");
335+
336+
check_equal("(vector-length #())", "0");
337+
check_equal("(vector-length #(1))", "1");
338+
check_equal("(vector-length #(1 2 3))", "3");
339+
340+
check_equal("(vector-ref #(1 2 3) 0)", "1");
341+
check_equal("(vector-ref #(1 2 3) 1)", "2");
342+
check_equal("(vector-ref #(1 2 3) 2)", "3");
343+
344+
check_equal("(let-values ([(v) #(1 2 3)]) (vector-set! v 0 0) v)", "#(0 2 3)");
345+
check_equal("(let-values ([(v) #(1 2 3)]) (vector-set! v 1 0) v)", "#(1 0 3)");
346+
check_equal("(let-values ([(v) #(1 2 3)]) (vector-set! v 2 0) v)", "#(1 2 0)");
347+
348+
check_equal("(vector->list #())", "()");
349+
check_equal("(vector->list #(1))", "(1)");
350+
check_equal("(vector->list #(1 2 3))", "(1 2 3)");
351+
352+
check_equal("(list->vector '())", "#()");
353+
check_equal("(list->vector '(1))", "#(1)");
354+
check_equal("(list->vector '(1 2 3))", "#(1 2 3)");
355+
356+
357+
return passed;
358+
}
359+
329360
int test_callwv(void) {
330361
passed = 1;
331362

@@ -440,6 +471,7 @@ int main(int argc, char **argv) {
440471
log_test("num", test_num, return_code);
441472
log_test("pair", test_pair, return_code);
442473
log_test("list", test_list, return_code);
474+
log_test("vector", test_vector, return_code);
443475
log_test("call-with-values", test_callwv, return_code);
444476
log_test("call/cc", test_callcc, return_code);
445477
log_test("dynamic-wind", test_dynamic_wind, return_code);

tests/prims.c

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,6 @@ int test_callwv(void) {
163163
return passed;
164164
}
165165

166-
167166
int test_list(void) {
168167
passed = 1;
169168

@@ -205,6 +204,18 @@ int test_vector(void) {
205204
check_equal("(vector-ref #(1 2 3) 1)", "2");
206205
check_equal("(vector-ref #(1 2 3) 2)", "3");
207206

207+
check_equal("(let-values ([(v) #(1 2 3)]) (vector-set! v 0 0) v)", "#(0 2 3)");
208+
check_equal("(let-values ([(v) #(1 2 3)]) (vector-set! v 1 0) v)", "#(1 0 3)");
209+
check_equal("(let-values ([(v) #(1 2 3)]) (vector-set! v 2 0) v)", "#(1 2 0)");
210+
211+
check_equal("(vector->list #())", "()");
212+
check_equal("(vector->list #(1))", "(1)");
213+
check_equal("(vector->list #(1 2 3))", "(1 2 3)");
214+
215+
check_equal("(list->vector '())", "#()");
216+
check_equal("(list->vector '(1))", "#(1)");
217+
check_equal("(list->vector '(1 2 3))", "#(1 2 3)");
218+
208219
return passed;
209220
}
210221

0 commit comments

Comments
 (0)