@@ -99,6 +99,7 @@ fn get_columns(mut arrays: Vec<Box<dyn ArrayBuilder>>) -> Vec<ArrayRef> {
99
99
#[ cfg( test) ]
100
100
mod tests {
101
101
use super :: * ;
102
+ use crate :: layout:: RowLayout ;
102
103
use crate :: reader:: read_as_batch;
103
104
use crate :: writer:: write_batch_unchecked;
104
105
use arrow:: record_batch:: RecordBatch ;
@@ -113,9 +114,10 @@ mod tests {
113
114
#[ allow( non_snake_case) ]
114
115
fn [ <test _single_ $TYPE>] ( ) -> Result <( ) > {
115
116
let schema = Arc :: new( Schema :: new( vec![ Field :: new( "a" , $TYPE, true ) ] ) ) ;
117
+ let record_width = RowLayout :: new( schema. as_ref( ) ) . fixed_part_width( ) ;
116
118
let a = $ARRAY:: from( $VEC) ;
117
119
let batch = RecordBatch :: try_new( schema. clone( ) , vec![ Arc :: new( a) ] ) ?;
118
- let mut vector = vec![ 0 ; 1024 ] ;
120
+ let mut vector = vec![ 0 ; record_width * batch . num_rows ( ) ] ;
119
121
let row_offsets =
120
122
{ write_batch_unchecked( & mut vector, 0 , & batch, 0 , schema. clone( ) ) } ;
121
123
let output_batch = { read_as_batch( & vector, schema, & row_offsets) ? } ;
@@ -127,10 +129,11 @@ mod tests {
127
129
#[ allow( non_snake_case) ]
128
130
fn [ <test_single_ $TYPE _null_free>] ( ) -> Result <( ) > {
129
131
let schema = Arc :: new( Schema :: new( vec![ Field :: new( "a" , $TYPE, false ) ] ) ) ;
132
+ let record_width = RowLayout :: new( schema. as_ref( ) ) . fixed_part_width( ) ;
130
133
let v = $VEC. into_iter( ) . filter( |o| o. is_some( ) ) . collect:: <Vec <_>>( ) ;
131
134
let a = $ARRAY:: from( v) ;
132
135
let batch = RecordBatch :: try_new( schema. clone( ) , vec![ Arc :: new( a) ] ) ?;
133
- let mut vector = vec![ 0 ; 1024 ] ;
136
+ let mut vector = vec![ 0 ; record_width * batch . num_rows ( ) ] ;
134
137
let row_offsets =
135
138
{ write_batch_unchecked( & mut vector, 0 , & batch, 0 , schema. clone( ) ) } ;
136
139
let output_batch = { read_as_batch( & vector, schema, & row_offsets) ? } ;
@@ -219,6 +222,56 @@ mod tests {
219
222
vec![ Some ( 5 ) , Some ( 7 ) , None , Some ( 0 ) , Some ( 111 ) ]
220
223
) ;
221
224
225
+ #[ test]
226
+ fn test_single_decimal128 ( ) -> Result < ( ) > {
227
+ let v = vec ! [
228
+ Some ( 0 ) ,
229
+ Some ( 1 ) ,
230
+ None ,
231
+ Some ( -1 ) ,
232
+ Some ( i128 :: MIN ) ,
233
+ Some ( i128 :: MAX ) ,
234
+ ] ;
235
+ let schema =
236
+ Arc :: new ( Schema :: new ( vec ! [ Field :: new( "a" , Decimal128 ( 38 , 10 ) , true ) ] ) ) ;
237
+ let record_width = RowLayout :: new ( schema. as_ref ( ) ) . fixed_part_width ( ) ;
238
+ let a = Decimal128Array :: from ( v) ;
239
+ let batch = RecordBatch :: try_new ( schema. clone ( ) , vec ! [ Arc :: new( a) ] ) ?;
240
+ let mut vector = vec ! [ 0 ; record_width * batch. num_rows( ) ] ;
241
+ let row_offsets =
242
+ { write_batch_unchecked ( & mut vector, 0 , & batch, 0 , schema. clone ( ) ) } ;
243
+ let output_batch = { read_as_batch ( & vector, schema, & row_offsets) ? } ;
244
+ assert_eq ! ( batch, output_batch) ;
245
+ Ok ( ( ) )
246
+ }
247
+
248
+ #[ test]
249
+ fn test_single_decimal128_null_free ( ) -> Result < ( ) > {
250
+ let v = vec ! [
251
+ Some ( 0 ) ,
252
+ Some ( 1 ) ,
253
+ None ,
254
+ Some ( -1 ) ,
255
+ Some ( i128 :: MIN ) ,
256
+ Some ( i128 :: MAX ) ,
257
+ ] ;
258
+ let schema = Arc :: new ( Schema :: new ( vec ! [ Field :: new(
259
+ "a" ,
260
+ Decimal128 ( 38 , 10 ) ,
261
+ false ,
262
+ ) ] ) ) ;
263
+ let record_width = RowLayout :: new ( schema. as_ref ( ) ) . fixed_part_width ( ) ;
264
+ let v = v. into_iter ( ) . filter ( |o| o. is_some ( ) ) . collect :: < Vec < _ > > ( ) ;
265
+ let a = Decimal128Array :: from ( v) ;
266
+ let batch = RecordBatch :: try_new ( schema. clone ( ) , vec ! [ Arc :: new( a) ] ) ?;
267
+ let mut vector = vec ! [ 0 ; record_width * batch. num_rows( ) ] ;
268
+ let row_offsets =
269
+ { write_batch_unchecked ( & mut vector, 0 , & batch, 0 , schema. clone ( ) ) } ;
270
+ let output_batch = { read_as_batch ( & vector, schema, & row_offsets) ? } ;
271
+ assert_eq ! ( batch, output_batch) ;
272
+ Ok ( ( ) )
273
+ }
274
+
222
275
#[ test]
223
276
#[ should_panic( expected = "not supported yet" ) ]
224
277
fn test_unsupported_type ( ) {
0 commit comments