From 45e7fd792191a8872595e13e523ffae7071e627b Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Sat, 8 Nov 2014 18:26:21 -0800 Subject: [PATCH] assocs: Make the output from zip, zip-index, and map-index the same type as the first seq/assoc argument. Add tests. --- core/assocs/assocs-tests.factor | 12 ++++++++++++ core/assocs/assocs.factor | 6 +++--- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/core/assocs/assocs-tests.factor b/core/assocs/assocs-tests.factor index da1deb0d8a..dc036799b4 100644 --- a/core/assocs/assocs-tests.factor +++ b/core/assocs/assocs-tests.factor @@ -218,6 +218,10 @@ unit-test { 11 23 35 } } [ { 11 22 33 } [ + ] map-index ] unit-test +{ + V{ 11 23 35 } +} [ V{ 11 22 33 } [ + ] map-index ] unit-test + { V{ 11 23 35 } } [ { 11 22 33 } [ + ] V{ } map-index-as ] unit-test @@ -235,6 +239,10 @@ unit-test { { 1 4 } { 2 5 } { 3 6 } } } [ { 1 2 3 } { 4 5 6 } zip ] unit-test +{ + V{ { 1 4 } { 2 5 } { 3 6 } } +} [ V{ 1 2 3 } { 4 5 6 } zip ] unit-test + { { { 1 4 } { 2 5 } { 3 6 } } } [ { 1 2 3 } { 4 5 6 } { } zip-as ] unit-test @@ -267,6 +275,10 @@ unit-test { { 11 0 } { 22 1 } { 33 2 } } } [ { 11 22 33 } zip-index ] unit-test +{ + V{ { 11 0 } { 22 1 } { 33 2 } } +} [ V{ 11 22 33 } zip-index ] unit-test + { { { 11 0 } { 22 1 } { 33 2 } } } [ { 11 22 33 } { } zip-index-as ] unit-test diff --git a/core/assocs/assocs.factor b/core/assocs/assocs.factor index cf458c0700..747c620d5e 100644 --- a/core/assocs/assocs.factor +++ b/core/assocs/assocs.factor @@ -207,7 +207,7 @@ M: assoc value-at* swap [ = nip ] curry assoc-find nip ; ] if ; inline : zip ( keys values -- alist ) - { } zip-as ; inline + over zip-as ; inline : map-index-as ( ... seq quot: ( ... elt index -- ... newelt ) exemplar -- ... obj ) dup sequence? [ @@ -219,13 +219,13 @@ M: assoc value-at* swap [ = nip ] curry assoc-find nip ; ] if ; inline : map-index ( ... seq quot: ( ... elt index -- ... newelt ) -- ... newseq ) - { } map-index-as ; inline + over map-index-as ; inline : zip-index-as ( values exemplar -- obj ) [ [ 2array ] ] dip map-index-as ; inline : zip-index ( values -- alist ) - { } zip-index-as ; inline + dup zip-index-as ; inline : unzip ( assoc -- keys values ) dup assoc-empty? [ drop { } { } ] [ >alist flip first2 ] if ;