1515// specific language governing permissions and limitations
1616// under the License.
1717
18- import { flatbuffers } from 'flatbuffers' ;
19- import Long = flatbuffers . Long ;
18+ import Arrow from './Arrow' ;
2019import {
20+ TypedArray ,
21+ TypedArrayConstructor ,
22+ NumericVectorConstructor ,
23+ } from './Arrow' ;
24+
25+ const {
2126 BoolVector,
22- TypedVector ,
2327 Int64Vector,
2428 Uint64Vector,
2529 Int8Vector,
@@ -28,28 +32,29 @@ import {
2832 Uint8Vector,
2933 Uint16Vector,
3034 Uint32Vector,
35+ Float16Vector,
3136 Float32Vector,
3237 Float64Vector,
33- } from './ Arrow' ;
38+ } = Arrow ;
3439
35- const LongVectors = {
36- Int64Vector : [ Int64Vector , Int32Array ] ,
37- Uint64Vector : [ Uint64Vector , Uint32Array ]
40+ const FixedSizeVectors = {
41+ Int64Vector : [ Int64Vector , Int32Array ] as [ NumericVectorConstructor < number , any > , any ] ,
42+ Uint64Vector : [ Uint64Vector , Uint32Array ] as [ NumericVectorConstructor < number , any > , any ]
3843} ;
3944
40- const TypedVectors = {
41- Int8Vector : [ Int8Vector , Int8Array ] ,
42- Int16Vector : [ Int16Vector , Int16Array ] ,
43- Int32Vector : [ Int32Vector , Int32Array ] ,
44- Uint8Vector : [ Uint8Vector , Uint8Array ] ,
45- Uint16Vector : [ Uint16Vector , Uint16Array ] ,
46- Uint32Vector : [ Uint32Vector , Uint32Array ] ,
47- Float32Vector : [ Float32Vector , Float32Array ] ,
48- Float64Vector : [ Float64Vector , Float64Array ]
45+ const FixedWidthVectors = {
46+ Int8Vector : [ Int8Vector , Int8Array ] as [ NumericVectorConstructor < number , any > , any ] ,
47+ Int16Vector : [ Int16Vector , Int16Array ] as [ NumericVectorConstructor < number , any > , any ] ,
48+ Int32Vector : [ Int32Vector , Int32Array ] as [ NumericVectorConstructor < number , any > , any ] ,
49+ Uint8Vector : [ Uint8Vector , Uint8Array ] as [ NumericVectorConstructor < number , any > , any ] ,
50+ Uint16Vector : [ Uint16Vector , Uint16Array ] as [ NumericVectorConstructor < number , any > , any ] ,
51+ Uint32Vector : [ Uint32Vector , Uint32Array ] as [ NumericVectorConstructor < number , any > , any ] ,
52+ Float32Vector : [ Float32Vector , Float32Array ] as [ NumericVectorConstructor < number , any > , any ] ,
53+ Float64Vector : [ Float64Vector , Float64Array ] as [ NumericVectorConstructor < number , any > , any ]
4954} ;
5055
51- const longVectors = toMap < [ typeof TypedVector , any ] > ( LongVectors , Object . keys ( LongVectors ) ) ;
52- const byteVectors = toMap < [ typeof TypedVector , any ] > ( TypedVectors , Object . keys ( TypedVectors ) ) ;
56+ const fixedSizeVectors = toMap ( FixedSizeVectors , Object . keys ( FixedSizeVectors ) ) ;
57+ const fixedWidthVectors = toMap ( FixedWidthVectors , Object . keys ( FixedWidthVectors ) ) ;
5358const bytes = Array . from (
5459 { length : 5 } ,
5560 ( ) => Uint8Array . from (
@@ -127,30 +132,66 @@ describe(`BoolVector`, () => {
127132 } ) ;
128133} ) ;
129134
130- for ( const [ VectorName , [ VectorType , ArrayType ] ] of longVectors ) {
135+ describe ( 'Float16Vector' , ( ) => {
136+ const values = concatTyped ( Uint16Array , ...bytes ) ;
137+ const vector = bytes
138+ . map ( ( b ) => new Float16Vector ( { data : new Uint16Array ( b . buffer ) } ) )
139+ . reduce ( ( v : any , v2 ) => v . concat ( v2 ) ) ;
140+ const n = values . length ;
141+ const clamp = ( x : number ) => Math . min ( ( x - 32767 ) / 32767 , 1 ) ;
142+ test ( `gets expected values` , ( ) => {
143+ let i = - 1 ;
144+ while ( ++ i < n ) {
145+ expect ( vector . get ( i ) ) . toEqual ( clamp ( values [ i ] ) ) ;
146+ }
147+ } ) ;
148+ test ( `iterates expected values` , ( ) => {
149+ expect . hasAssertions ( ) ;
150+ let i = - 1 ;
151+ for ( let v of vector ) {
152+ expect ( ++ i ) . toBeLessThan ( n ) ;
153+ expect ( v ) . toEqual ( clamp ( values [ i ] ) ) ;
154+ }
155+ } ) ;
156+ test ( `slices the entire array` , ( ) => {
157+ expect ( vector . slice ( ) ) . toEqual ( values ) ;
158+ } ) ;
159+ test ( `slice returns a TypedArray` , ( ) => {
160+ expect ( vector . slice ( ) ) . toBeInstanceOf ( Uint16Array ) ;
161+ } ) ;
162+ test ( `slices from -20 to length` , ( ) => {
163+ expect ( vector . slice ( - 20 ) ) . toEqual ( values . slice ( - 20 ) ) ;
164+ } ) ;
165+ test ( `slices from 0 to -20` , ( ) => {
166+ expect ( vector . slice ( 0 , - 20 ) ) . toEqual ( values . slice ( 0 , - 20 ) ) ;
167+ } ) ;
168+ test ( `slices the array from 0 to length - 20` , ( ) => {
169+ expect ( vector . slice ( 0 , n - 20 ) ) . toEqual ( values . slice ( 0 , n - 20 ) ) ;
170+ } ) ;
171+ test ( `slices the array from 0 to length + 20` , ( ) => {
172+ expect ( vector . slice ( 0 , n + 20 ) ) . toEqual (
173+ concatTyped ( Uint16Array , values , values . slice ( 0 , 20 ) ) ) ;
174+ } ) ;
175+ } ) ;
176+
177+ for ( const [ VectorName , [ VectorType , ArrayType ] ] of fixedSizeVectors ) {
131178 describe ( `${ VectorName } ` , ( ) => {
132179 const values = concatTyped ( ArrayType , ...bytes ) ;
133180 const vector = bytes
134- . map ( ( b ) => new VectorType < Long , any > ( {
135- data : new ArrayType ( b . buffer )
136- } ) )
181+ . map ( ( b ) => new VectorType ( { data : new ArrayType ( b . buffer ) } ) )
137182 . reduce ( ( v : any , v2 ) => v . concat ( v2 ) ) ;
138183 const n = values . length * 0.5 ;
139184 test ( `gets expected values` , ( ) => {
140185 let i = - 1 ;
141186 while ( ++ i < n ) {
142- expect ( vector . get ( i ) ) . toEqual ( new Long (
143- values [ i * 2 ] , values [ i * 2 + 1 ]
144- ) ) ;
187+ expect ( vector . get ( i ) ) . toEqual ( values . slice ( 2 * i , 2 * ( i + 1 ) ) ) ;
145188 }
146189 } ) ;
147190 test ( `iterates expected values` , ( ) => {
148191 let i = - 1 ;
149192 for ( let v of vector ) {
150193 expect ( ++ i ) . toBeLessThan ( n ) ;
151- expect ( v ) . toEqual ( new Long (
152- values [ i * 2 ] , values [ i * 2 + 1 ]
153- ) ) ;
194+ expect ( v ) . toEqual ( values . slice ( 2 * i , 2 * ( i + 1 ) ) ) ;
154195 }
155196 } ) ;
156197 test ( `slices the entire array` , ( ) => {
@@ -175,13 +216,11 @@ for (const [VectorName, [VectorType, ArrayType]] of longVectors) {
175216 } ) ;
176217}
177218
178- for ( const [ VectorName , [ VectorType , ArrayType ] ] of byteVectors ) {
219+ for ( const [ VectorName , [ VectorType , ArrayType ] ] of fixedWidthVectors ) {
179220 describe ( `${ VectorName } ` , ( ) => {
180221 const values = concatTyped ( ArrayType , ...bytes ) ;
181222 const vector = bytes
182- . map ( ( b ) => new VectorType < number , any > ( {
183- data : new ArrayType ( b . buffer )
184- } ) )
223+ . map ( ( b ) => new VectorType ( { data : new ArrayType ( b . buffer ) } ) )
185224 . reduce ( ( v : any , v2 ) => v . concat ( v2 ) ) ;
186225
187226 const n = values . length ;
@@ -221,14 +260,14 @@ for (const [VectorName, [VectorType, ArrayType]] of byteVectors) {
221260 } ) ;
222261}
223262
224- function toMap < T > ( entries : any , keys : string [ ] ) {
263+ function toMap < T > ( entries : Record < string , T > , keys : string [ ] ) {
225264 return keys . reduce ( ( map , key ) => {
226265 map . set ( key , entries [ key ] as T ) ;
227266 return map ;
228267 } , new Map < string , T > ( ) ) ;
229268}
230269
231- function concatTyped ( ArrayType : any , ...bytes : any [ ] ) {
270+ function concatTyped < T extends TypedArray > ( ArrayType : TypedArrayConstructor < T > , ...bytes : any [ ] ) {
232271 const BPE = ArrayType . BYTES_PER_ELEMENT ;
233272 return bytes . reduce ( ( v , bytes ) => {
234273 const l = bytes . byteLength / BPE ;
@@ -237,5 +276,5 @@ function concatTyped(ArrayType: any, ...bytes: any[]) {
237276 a . set ( v ) ;
238277 a . set ( b , v . length ) ;
239278 return a ;
240- } , new ArrayType ( 0 ) ) as Array < number > ;
279+ } , new ArrayType ( 0 ) ) as T ;
241280}
0 commit comments