]> gitweb.factorcode.org Git - factor.git/commitdiff
Add 1sequence word. Add unit tests for existing 1vector and 1byte-array words, and...
authorSlava Pestov <slava@slava-pestovs-macbook-pro.local>
Wed, 4 Feb 2009 11:13:12 +0000 (05:13 -0600)
committerSlava Pestov <slava@slava-pestovs-macbook-pro.local>
Wed, 4 Feb 2009 11:13:12 +0000 (05:13 -0600)
core/byte-arrays/byte-arrays-tests.factor
core/byte-arrays/byte-arrays.factor
core/sequences/sequences-docs.factor
core/sequences/sequences.factor
core/vectors/vectors-tests.factor
core/vectors/vectors.factor

index edaea108a18d23d10d1a36d43741ff9dd04e68dc..1c3e4d3bdfdc4ca3755f0b1402e66e04a0e19cd4 100644 (file)
@@ -9,3 +9,5 @@ USING: tools.test byte-arrays sequences kernel ;
 [ B{ 1 2 } ] [ 2 B{ 1 2 3 4 5 6 7 8 9 } resize-byte-array ] unit-test\r
 \r
 [ -10 B{ } resize-byte-array ] must-fail\r
+\r
+[ B{ 123 } ] [ 123 1byte-array ] unit-test
\ No newline at end of file
index f0d188ce4a705855a356eb3b07c3e332a55e090a..72989ac447069d04fd48c9460b1136010589bca4 100644 (file)
@@ -1,4 +1,4 @@
-! Copyright (C) 2007, 2008 Slava Pestov.
+! Copyright (C) 2007, 2009 Slava Pestov.
 ! See http://factorcode.org/license.txt for BSD license.
 USING: accessors kernel kernel.private alien.accessors sequences
 sequences.private math ;
@@ -19,7 +19,7 @@ M: byte-array resize
 
 INSTANCE: byte-array sequence
 
-: 1byte-array ( x -- byte-array ) 1 <byte-array> [ set-first ] keep ; inline
+: 1byte-array ( x -- byte-array ) B{ } 1sequence ; inline
 
 : 2byte-array ( x y -- byte-array ) B{ } 2sequence ; inline
 
index f213be4fe782e5ac43ba49fb451c0de28b88d83d..6ca782a2025d5cbaf419d6a28d9980e46875b9f5 100755 (executable)
@@ -207,6 +207,10 @@ HELP: first4-unsafe
 { $values { "seq" sequence } { "first" "the first element" } { "second" "the second element" } { "third" "the third element" } { "fourth" "the fourth element" } }
 { $contract "Unsafe variant of " { $link first4 } " that does not perform bounds checks." } ;
 
+HELP: 1sequence
+{ $values { "obj" object } { "exemplar" sequence } { "seq" sequence } }
+{ $description "Creates a one-element sequence of the same type as " { $snippet "exemplar" } "." } ;
+
 HELP: 2sequence
 { $values { "obj1" object } { "obj2" object } { "exemplar" sequence } { "seq" sequence } }
 { $description "Creates a two-element sequence of the same type as " { $snippet "exemplar" } "." } ;
index 2c30a62fe3e2bd8bb182a86ceaeb5ab78b7327da..9e64cfa5361a124b12ad21880a37a095a207e90c 100755 (executable)
@@ -137,9 +137,12 @@ INSTANCE: iota immutable-sequence
 
 : from-end ( seq n -- seq n' ) [ dup length ] dip - ; inline
 
+: (1sequence) ( obj seq -- seq )
+    [ 0 swap set-nth-unsafe ] keep ; inline
+
 : (2sequence) ( obj1 obj2 seq -- seq )
     [ 1 swap set-nth-unsafe ] keep
-    [ 0 swap set-nth-unsafe ] keep ; inline
+    (1sequence) ; inline
 
 : (3sequence) ( obj1 obj2 obj3 seq -- seq )
     [ 2 swap set-nth-unsafe ] keep
@@ -151,6 +154,9 @@ INSTANCE: iota immutable-sequence
 
 PRIVATE>
 
+: 1sequence ( obj exemplar -- seq )
+    1 swap [ (1sequence) ] new-like ; inline
+
 : 2sequence ( obj1 obj2 exemplar -- seq )
     2 swap [ (2sequence) ] new-like ; inline
 
index f2e29d79e84de3c3ddc3c27a8de5fe937ab59cb2..12e2ea49f78d250e24c668c84dc4631712ed8c5c 100644 (file)
@@ -97,3 +97,5 @@ IN: vectors.tests
 [ fixnum ] [ 1 >bignum V{ } new-sequence length class ] unit-test
 
 [ fixnum ] [ 1 >bignum [ ] V{ } map-as length class ] unit-test
+
+[ V{ "lulz" } ] [ "lulz" 1vector ] unit-test
\ No newline at end of file
index a6bfef71d016a656b1abe56bb483970eb62c3280..1bdda7b69da91567ffdfc642df421faa8a0917cd 100644 (file)
@@ -40,7 +40,7 @@ M: sequence new-resizable drop <vector> ;
 
 INSTANCE: vector growable
 
-: 1vector ( x -- vector ) 1array >vector ;
+: 1vector ( x -- vector ) V{ } 1sequence ;
 
 : ?push ( elt seq/f -- seq )
     [ 1 <vector> ] unless* [ push ] keep ;