@@ -62,6 +62,48 @@ Deno.test('TSV loading', async (t) => {
6262 }
6363 } )
6464
65+ await t . step ( 'maxRows limits the number of rows read' , async ( ) => {
66+ const file = pathToFile ( '/long.tsv' )
67+ // Use 1500 to avoid overlap with default initial capacity
68+ const text = 'a\tb\tc\n' + '1\t2\t3\n' . repeat ( 1500 )
69+ file . stream = streamFromString ( text )
70+
71+ let map = await loadTSV ( file , 0 )
72+ assertEquals ( map . a , [ ] )
73+ assertEquals ( map . b , [ ] )
74+ assertEquals ( map . c , [ ] )
75+
76+ // Clear memoization cache. We currently do not key on maxRows.
77+ loadTSV . cache . clear ( )
78+ file . stream = streamFromString ( text )
79+ map = await loadTSV ( file , 1 )
80+ assertEquals ( map . a , [ '1' ] )
81+ assertEquals ( map . b , [ '2' ] )
82+ assertEquals ( map . c , [ '3' ] )
83+
84+ loadTSV . cache . clear ( )
85+ file . stream = streamFromString ( text )
86+ map = await loadTSV ( file , 2 )
87+ assertEquals ( map . a , [ '1' , '1' ] )
88+ assertEquals ( map . b , [ '2' , '2' ] )
89+ assertEquals ( map . c , [ '3' , '3' ] )
90+
91+ loadTSV . cache . clear ( )
92+ file . stream = streamFromString ( text )
93+ map = await loadTSV ( file , - 1 )
94+ assertEquals ( map . a , Array ( 1500 ) . fill ( '1' ) )
95+ assertEquals ( map . b , Array ( 1500 ) . fill ( '2' ) )
96+ assertEquals ( map . c , Array ( 1500 ) . fill ( '3' ) )
97+
98+ loadTSV . cache . clear ( )
99+ // Check that maxRows does not truncate shorter files
100+ file . stream = streamFromString ( 'a\tb\tc\n1\t2\t3\n4\t5\t6\n7\t8\t9\n' )
101+ map = await loadTSV ( file , 4 )
102+ assertEquals ( map . a , [ '1' , '4' , '7' ] )
103+ assertEquals ( map . b , [ '2' , '5' , '8' ] )
104+ assertEquals ( map . c , [ '3' , '6' , '9' ] )
105+ } )
106+
65107 // Tests will have populated the memoization cache
66108 await loadTSV . cache . clear ( )
67109} )
0 commit comments