github.com/fraugster/parquet-go@v0.12.0/packed_array_test.go (about)

     1  package goparquet
     2  
     3  import (
     4  	"math"
     5  	"math/rand"
     6  	"testing"
     7  
     8  	"github.com/stretchr/testify/require"
     9  )
    10  
    11  func newRandomPacked(bw int, size int32) (*packedArray, []int32) {
    12  	max := int32(math.Pow(2, float64(bw)))
    13  	data := make([]int32, size)
    14  	packed := &packedArray{}
    15  	packed.reset(bw)
    16  	for i := int32(0); i < size; i++ {
    17  		data[i] = rand.Int31n(max)
    18  		packed.appendSingle(data[i])
    19  	}
    20  	return packed, data
    21  }
    22  
    23  func TestPackedArray(t *testing.T) {
    24  	const (
    25  		bw   = 13
    26  		size = 10000
    27  	)
    28  	packed, data := newRandomPacked(bw, size)
    29  
    30  	ret := make([]int32, 0, size)
    31  	count := 0
    32  	for {
    33  		at, err := packed.at(count)
    34  		if err != nil {
    35  			break
    36  		}
    37  		ret = append(ret, at)
    38  		count++
    39  	}
    40  
    41  	require.Equal(t, size, count)
    42  	require.Equal(t, data, ret)
    43  }
    44  
    45  func TestPackedArrayAppendArray(t *testing.T) {
    46  	const bw = 7
    47  
    48  	fixed, data1 := newRandomPacked(bw, 8*10)
    49  	notFixed, data2 := newRandomPacked(bw, 8*10+1)
    50  
    51  	fixed.appendArray(notFixed)
    52  	require.Equal(t, append(data1, data2...), fixed.toArray())
    53  
    54  	fixed, data1 = newRandomPacked(bw, 8*10)
    55  	notFixed, data2 = newRandomPacked(bw, 8*10+1)
    56  
    57  	notFixed.appendArray(fixed)
    58  	require.Equal(t, append(data2, data1...), notFixed.toArray())
    59  }
    60  
    61  func TestPackedArrayAppendArrayCrash(t *testing.T) {
    62  	data := []byte("PAR1\x15\x04\x15\x80\x13\x15\x80\x13L\x15\xe0\x04\x15\x04\x12\x00" +
    63  		"\x009\xf9\xff\xff \xeb\xff\xff\xd3\x0e\x00\x00\xf8\x1c\x00\x00\xe1\x02\x00" +
    64  		"\x00\xc3\xee\xff\xff\x85\x12\x00\x00\x1b\x1f\x00\x00&\xea\xff\xff\x9b\r\x00" +
    65  		"\x00\xdd\xe9\xff\xff\r\xdf\xff\xff\xc6\xec\xff\xff\xdb\xeb\xff\xff\xce\x05\x00" +
    66  		"\x00\x8e\xf3\xff\xff\xfe\xe5\xff\xff\x98\x06\x00\x001\f\x00\x00\x02\xeb\xff" +
    67  		"\xff\xf2\xeb\xff\xff\xad\xf9\xff\xff\x8b\xfe\xff\xff\x11\x00\x00\x00%\xf0\xff" +
    68  		"\xff\xb5\xe8\xff\xff\xac%\x00\x002\x14\x00\x00\xeb\x18\x00\x00\xa5\xf7\xff" +
    69  		"\xff\x9e%\x00\x00\xd6\xfa\xff\xff\xdf\x1b\x00\x00?\x15\x00\x00$\xf5\xff" +
    70  		"\xff\x1a\xf4\xff\xff\xfd\xf9\xff\xffw \x00\x00\x06%\x00\x00\x05\xe8\xff" +
    71  		"\xff\xdf&\x00\x00\xc8\xf9\xff\xffB&\x00\x00\x86\xee\xff\xffA\x0e\x00" +
    72  		"\x00\xe0\a\x00\x00$\x18\x00\x00\xf4\xf3\xff\xff\x00\xee\xff\xff\xd5\xfa\xff" +
    73  		"\xff\xdd\x12\x00\x00\x14\xe7\xff\xff\xdc\b\x00\x00\x91\x1f\x00\x00y\xde\xff" +
    74  		"\xffg\x14\x00\x00\x0e\xf1\xff\xff\a%\x00\x00\xa9\xe5\xff\xff\xc8!\x00" +
    75  		"\x00\x8d\xf3\xff\xff\xba\xf9\xff\xff\xc8\n\x00\x00\xf5\x18\x00\x00\xfb\x01\x00" +
    76  		"\x00@\xeb\xff\xff\x19\x1f\x00\x008\n\x00\x00\xc4\x03\x00\x00\x83\xee\xff" +
    77  		"\xff\xa7\t\x00\x00\x11\xdd\xff\xff?\xf4\xff\xff,\xeb\xff\xff$\x04\x00" +
    78  		"\x00\x8f\x1e\x00\x00\x10\x0e\x00\x00\xa3\x03\x00\x00}\x01\x00\x00\xef\r\x00" +
    79  		"\x00\xa7\x1c\x00\x00~\xf2\xff\xff\x10\xec\xff\xff\xfe\xe9\xff\xff\xac\xeb\xff" +
    80  		"\xffT\xfc\xff\xff\xb7\xda\xff\xff\xc7\x12\x00\x003\xf4\xff\xff&!\x00" +
    81  		"\x00\xe4\x11\x00\x00\x84\f\x00\x00\x89\x10\x00\x00\xeb\x12\x00\x00@\xfa\xff" +
    82  		"\xff]\x17\x00\x00\xa7\x1d\x00\x00\xf3\xe2\xff\xff\xf9\xf3\xff\xff\a\xfb\xff" +
    83  		"\xffl\x1d\x00\x00+$\x00\x00A\xfc\xff\xff\xaa\xeb\xff\xff8\x1c\x00" +
    84  		"\x00\xce\xf9\xff\xffB#\x00\x00\u007f\xeb\xff\xff\xf1\x1b\x00\x00_\x06\x00" +
    85  		"\x00\xad#\x00\x00\xc8\b\x00\x00\x1a\x02\x00\x00`\xf2\xff\xff>\x01\x00" +
    86  		"\x00;\xdc\xff\xff\xce\x13\x00\x00\x90\b\x00\x00\x1c\x03\x00\x00\xbc\x01\x00" +
    87  		"\x006\xef\xff\xff\xdd\x04\x00\x00f\xe8\xff\xffw\x18\x00\x00N\xe6\xff" +
    88  		"\xff\xfd\x11\x00\x00R%\x00\x00\x89 \x00\x00\xd5\"\x00\x00m\"\x00" +
    89  		"\x00\x9e\xef\xff\xff\xaf\"\x00\x00\xc9\xfd\xff\xffr\xe0\xff\xffo\x00\x00" +
    90  		"\x00D#\x00\x00\xf4\x01\x00\x00\x1b\x12\x00\x00E\x18\x00\x00\"\x10\x00" +
    91  		"\x00\xd3\xde\xff\xff\x91\x03\x00\x00\t%\x00\x00h\xdf\xff\xff\xcd\x0e\x00" +
    92  		"\x00'\xe5\xff\xff\xba\xf1\xff\xffg\x02\x00\x00`\xf8\xff\xff`\xe3\xff" +
    93  		"\xff*\xe5\xff\xff\xeb\x14\x00\x00\x83\x06\x00\x00\x9d\xf7\xff\xff1\v\x00" +
    94  		"\x00V\xf1\xff\xff\x02\xe4\xff\xff\xa3\x1a\x00\x00a\x05\x00\x00x\x1a\x00" +
    95  		"\x00\x02\x15\x00\x00\xbc\xdd\xff\xff\xbe\x05\x00\x00\xf8!\x00\x00\x11\x1b\x00" +
    96  		"\x00\x04\x14\x00\x00p\xe7\xff\xff(\xdc\xff\xff\xec$\x00\x00h\x13\x00" +
    97  		"\x00\x9e\x03\x00\x00O\xec\xff\xff\n\xf3\xff\xff\x16\xf4\xff\xff\"\xf3\xff" +
    98  		"\xff8\xf9\xff\xff\xba\x15\x00\x00'\r\x00\x00\x1e\xf6\xff\xff\xb1%\x00" +
    99  		"\x00.\xde\xff\xff\x13\xf5\xff\xff\xfe\v\x00\x00\xbc\t\x00\x000\x18\x00" +
   100  		"\x00\x9d\x1c\x00\x00d\x1a\x00\x00i\x1a\x00\x00\xde\xfe\xff\xffV\x0f\x00" +
   101  		"\x00\x1c\xe4\xff\xff\xb9\x1a\x00\x002\xd9\xff\xff\x8e\xd9\xff\xff%\x02\x00" +
   102  		"\x00\x04\xe3\xff\xff\x1b\xf0\xff\xff\x1f\xed\xff\xff\x90\xfd\xff\xff\x81\x15\x00" +
   103  		"\x00\xc7\"\x00\x00\r\xe4\xff\xff^\xfe\xff\xff\x1f\xde\xff\xff\xbc\xf0\xff" +
   104  		"\xff\x87\xdf\xff\xff:\x06\x00\x00\xce\f\x00\x00%\x03\x00\x00\x98\xfe\xff" +
   105  		"\xff\xe8\xe4\xff\xffR\t\x00\x00y\xe3\xff\xff)\xf4\xff\xff\xc0\xe6\xff" +
   106  		"\xff\xf0!\x00\x00\xa2&\x00\x00\xae\xd9\xff\xffZ\xda\xff\xff\xcd#\x00" +
   107  		"\x00\xa4\xe7\xff\xff/\xe0\xff\xff\xa3 \x00\x00\x93\x1e\x00\x00\x0f\xf1\xff" +
   108  		"\xff\xe0\x1c\x00\x00\xcb\xec\xff\xff\x8a\xef\xff\xff\x9c\xe8\xff\xff\xee\xff\xff" +
   109  		"\xff\x00\xfe\xff\xff\xed\x17\x00\x00\x90\x0f\x00\x00\xbe\xde\xff\xff@$\x00" +
   110  		"\x00\xfa\x1a\x00\x00\xb2\x00\x00\x00f\xda\xff\xff\xb9\x0e\x00\x00H\xf3\xff" +
   111  		"\xffl\x00\x00\x00\x88\x13\x00\x00u\xf0\xff\xff\x8d\xfc\xff\xffq\xd9\xff" +
   112  		"\xff\x89\xef\xff\xff\x8d\x1d\x00\x00\xc6\x13\x00\x00K\xed\xff\xff\x92\xf5\xff" +
   113  		"\xff\x81!\x00\x001\xf2\xff\xff2\x1d\x00\x00\x8a\f\x00\x00\x18\xec\xff" +
   114  		"\xff\xa4\xe4\xff\xff\u007f\x14\x00\x00\xb1\x0e\x00\x00}\xf1\xff\xff\xa6\xf0\xff" +
   115  		"\xff\x97\xf7\xff\xffZ\xe7\xff\xff\x9f\x04\x00\x00\xd0\x0f\x00\x00~\xe6\xff" +
   116  		"\xffe\xf6\xff\xfff\x18\x00\x00h\v\x00\x00\xe0\xd9\xff\xff\x94\x18\x00" +
   117  		"\x00\x8f\"\x00\x00\x12\x1a\x00\x00L\xe0\xff\xff<\x11\x00\x00\x1b\xfe\xff" +
   118  		"\xffr\x17\x00\x00F\x0e\x00\x00j\x1e\x00\x00]\xdc\xff\xff6\x06\x00" +
   119  		"\x004\x1e\x00\x00\x13\xf6\xff\xff\x85\xfe\xff\xffU\xef\xff\xff\xec\xfb\xff" +
   120  		"\xffW\xde\xff\xff-\xe1\xff\xff'\xfc\xff\xff\xbc\xde\xff\xff\\\xf7\xff" +
   121  		"\xff\x89\xee\xff\xff'\x12\x00\x00\xd8\v\x00\x00\x90\xf2\xff\xffj\xf8\xff" +
   122  		"\xff\xa8\xeb\xff\xff\xe4 \x00\x00\x89\x1c\x00\x00\xfa\x06\x00\x00\xff%\x00" +
   123  		"\x00}\xda\xff\xff\b\x18\x00\x00\xc1 \x00\x00\x88\xe5\xff\xff\x15\x00\x15" +
   124  		"\xc6\x06\x15\xc6\x06,\x15\x80\x00\x15\x04\x15\x06\x15\x06\x1c\x18\x04\xdf&" +
   125  		"\x00\x00\x18\x042\xd9\xff\xff\x16\x8a\x01(\x04\xdf&\x00\x00\x18\x042" +
   126  		"\xd9\xff\xff\x00\x00\x00>\x00\x00\x00\x01\r\xbe\xee}}\xbd\xe7\x12\x01" +
   127  		"\a\xe6\xef\xcf\x14\x01\a\xfe\xf7\xee\x10\x01\x03\xf4\x1e\x01\x03\xbe3\x01" +
   128  		"\x15\xecϽ\xe7\xfb\xeb\u05fd\xfe\xb7\x10\x01\x03\xe8\x16\x01\v\xda\xd7" +
   129  		"\xba\xfd\xcf\x12\x01\a^\xe9\x17\t\x15\x02\x19\x9c5\x00\x18\x06sc" +
   130  		"hema\x15\f\x00\x15\x02%\x02\x18\x01a% L\xac\x13\x10" +
   131  		"\x11\x00\x00\x00\x15\n%\x02\x18\x01b\x00\x15\f%\x02\x18\x01c%" +
   132  		"\x00L\x1c\x00\x00\x005\x02\x18\x01d\x15\x02\x15\x06L<\x00\x00\x00" +
   133  		"5\x04\x18\x04list\x15\x02\x00\x15\x04%\x02\x18\x04ite" +
   134  		"m\x00\x15\x02%\x02\x18\x01e% L\xac\x13\x10\x11\x00\x00\x00\x15" +
   135  		"\f%\x02\x18\ano_dict%\x00L\x1c\x00\x00\x00\x16" +
   136  		"\xd0\x0f\x19<\x19l&\xd2\x1a\x1c\x15\x02\x195\x04\x00\x06\x19\x18\x01" +
   137  		"a\x15\x00\x16\xee\x05\x16\xca\x1a\x16\xca\x1a&\xaa\x13&\b\x1c\x18\x04" +
   138  		"\xdf&\x00\x00\x18\x042\xd9\xff\xff\x16\x8a\x01(\x04\xdf&\x00\x00\x18" +
   139  		"\x042\xd9\xff\xff\x00\x00\x00&\xc0R\x1c\x15\n\x195\x04\x00\x06\x19" +
   140  		"\x18\x01b\x15\x00\x16\xee\x05\x16\xf26\x16\xf26&\xe0J&\xce\x1b" +
   141  		"\x1c\x18\b|\xa4\xbe\xab\x1c\x97\x02B\x18\b+\xbe_}S}\x02" +
   142  		"\xc2\x16\x00(\b|\xa4\xbe\xab\x1c\x97\x02B\x18\b+\xbe_}S" +
   143  		"}\x02\xc2\x00\x00\x00&\x8en\x1c\x15\f\x195\x04\x00\x06\x19\x18\x01" +
   144  		"c\x15\x00\x16\xee\x05\x16\xb2\x1a\x16\xb2\x1a&\xeeg&\xdcS\x1c6" +
   145  		"\x8e\x01(\x03zqb\x18\x00\x00\x00\x00&\xc0\xc2\x04\x1c\x15\x04\x19" +
   146  		"5\x04\x00\x06\x198\x01d\x04list\x04item\x15\x00" +
   147  		"\x16\xa8>\x16\xd6\xd3\x03\x16\xd6\xd3\x03&\xa0\xde\x03&\xean\x1c\x18" +
   148  		"\b\x0f'\x00\x00\x00\x00\x00\x00\x18\b\xf6\xd8\xff\xff\xff\xff\xff\xff\x16" +
   149  		"\xc8\f(\b\x0f'\x00\x00\x00\x00\x00\x00\x18\b\xf6\xd8\xff\xff\xff\xff" +
   150  		"\xff\xff\x00\x00\x00&\x90\xc5\x04\x1c\x15\x02\x195\x04\x00\x06\x19\x18\x01" +
   151  		"e\x15\x00\x16\xee\x05\x16\x96\x01\x16\x96\x01&\x9e\xc4\x04&\xfa\xc3\x04" +
   152  		"\x1c\x18\x04*\x00\x00\x00\x18\x04*\x00\x00\x00\x16\x00(\x04*\x00\x00" +
   153  		"\x00\x18\x04*\x00\x00\x00\x00\x00\x00&\xe2\x9b\x05\x1c\x15\f\x19%\x00" +
   154  		"\x06\x19\x18\ano_dict\x15\x00\x16\xee\x05\x16\xd0U\x16" +
   155  		"\xd0U&\x92\xc6\x04<6\x9e\x01(\x03zvn\x18\x00\x00\x00\x00" +
   156  		"\x16\xaa\x96\x05\x16\xee\x05&\xd2\x1a\x16\xaa\x96\x05\x14\x00\x00\x19l&" +
   157  		"\x8c\xb6\x05\x1c\x15\x02\x195\x04\x00\x06\x19\x18\x01a\x15\x00\x16\xee\x05" +
   158  		"\x16\xc6\x19\x16\xc6\x19&\x88\xaf\x05&Ɯ\x05\x1c\x18\x04\x83&\x00" +
   159  		"\x00\x18\x04\x12\xd9\xff\xff\x16\x9c\x01(\x04\x83&\x00\x00\x18\x04\x12\xd9" +
   160  		"\xff\xff\x00\x00\x00&\x82\xee\x05\x1c\x15\n\x195\x04\x00\x06\x19\x18\x01" +
   161  		"b\x15\x00\x16\xee\x05\x16\xf26\x16\xf26&\xa2\xe6\x05&\x90\xb7\x05" +
   162  		"\x1c\x18\b0kw^\xebh\x02B\x18\bǔ\xc5\x03\xf2\x89\x02" +
   163  		"\xc2\x16\x00(\b0kw^\xebh\x02B\x18\bǔ\xc5\x03\xf2" +
   164  		"\x89\x02\xc2\x00\x00\x00&\xf6\x88\x06\x1c\x15\f\x195\x04\x00\x06\x19\x18" +
   165  		"\x01c\x15\x00\x16\xee\x05\x16\xd2\x19\x16\xd2\x19&Ȃ\x06&\xa4\xef" +
   166  		"\x05\x1c6\x8a\x01(\x03zoz\x18\x00\x00\x00\x00&\xbc\xcb\t\x1c" +
   167  		"\x15\x04\x195\x04\x00\x06\x198\x01d\x04list\x04ite" +
   168  		"m\x15\x00\x16\xc4:\x16\xe4\xc1\x03\x16\xe4\xc1\x03&\xbe\xeb\b&\xd8" +
   169  		"\x89\x06\x1c\x18\b\x10'\x00\x00\x00\x00\x00\x00\x18\b\x01\xd9\xff\xff\xff" +
   170  		"\xff\xff\xff\x16\xc6\n(\b\x10'\x00\x00\x00\x00\x00\x00\x18\b\x01\xd9" +
   171  		"\xff\xff\xff\xff\xff\xff\x00\x00\x00&\x8e\xce\t\x1c\x15\x02\x195\x04\x00" +
   172  		"\x06\x19\x18\x01e\x15\x00\x16\xee\x05\x16\x96\x01\x16\x96\x01&\x9c\xcd\t" +
   173  		"&\xf8\xcc\t\x1c\x18\x04*\x00\x00\x00\x18\x04*\x00\x00\x00\x16\x00(" +
   174  		"\x04*\x00\x00\x00\x18\x04*\x00\x00\x00\x00\x00\x00&\xa6\xb2\n\x1c\x15" +
   175  		"\f\x19%\x00\x06\x19\x18\ano_dict\x15\x00\x16\xee\x05" +
   176  		"\x16\x96c\x16\x96c&\x90\xcf\t<6v(\x04zgHe\x18" +
   177  		"\x00\x00\x00\x00\x16\x9a\x90\x05\x16\xee\x05&\x8c\xb6\x05\x16\x9a\x90\x05\x14" +
   178  		"\x02\x00\x19l&\xce\xc3\n\x1c\x15\x02\x195\x04\x00\x06\x19\x18\x01a" +
   179  		"\x15\x00\x16\xf4\x03\x16\xc4\x10\x16\xc4\x10&\x9c\xbf\n&\x8a\xb3\n\x1c" +
   180  		"\x18\x04\xe7&\x00\x00\x18\x04,\xd9\xff\xff\x16v(\x04\xe7&\x00\x00" +
   181  		"\x18\x04,\xd9\xff\xff\x00\x00\x00&\xa4\xe9\n\x1c\x15\n\x195\x04\x00" +
   182  		"\x06\x19\x18\x01b\x15\x00\x16\xf4\x03\x16\xd4$\x16\xd4$&\x92\xe4\n" +
   183  		"&\xd0\xc4\n\x1c\x18\bL\x98;\x80\vp\x02B\x18\b\xf4?\xc2" +
   184  		"\xd9 w\x02\xc2\x16\x00(\bL\x98;\x80\vp\x02B\x18\b\xf4" +
   185  		"?\xc2\xd9 w\x02\xc2\x00\x00\x00&\xd4\xfc\n\x1c\x15\f\x195\x04" +
   186  		"\x00\x06\x19\x18\x01c\x15\x00\x16\xf4\x03\x16\x8e\x12\x16\x8e\x12&\x9c\xf8" +
   187  		"\n&\xc6\xea\n\x1c6`(\x02zm\x18\x00\x00\x00\x00&\xf0\x91" +
   188  		"\r\x1c\x15\x04\x195\x04\x00\x06\x198\x01d\x04list\x04i" +
   189  		"tem\x15\x00\x16\x96$\x16\xbe\x94\x02\x16\xbe\x94\x02&\xb8\xda\f" +
   190  		"&\xb2\xfd\n\x1c\x18\b\x03'\x00\x00\x00\x00\x00\x00\x18\b\xf2\xd8\xff" +
   191  		"\xff\xff\xff\xff\xff\x16\x90\a(\b\x03'\x00\x00\x00\x00\x00\x00\x18\b" +
   192  		"\xf2\xd8\xff\xff\xff\xff\xff\xff\x00\x00\x00&\u0094\r\x1c\x15\x02\x195" +
   193  		"\x04\x00\x06\x19\x18\x01e\x15\x00\x16\xf4\x03\x16\x96\x01\x16\x96\x01&\xd0" +
   194  		"\x93\r&\xac\x93\r\x1c\x18\x04*\x00\x00\x00\x18\x04*\x00\x00\x00\x16" +
   195  		"\x00(\x04*\x00\x00\x00\x18\x04*\x00\x00\x00\x00\x00\x00&\xd4\xcd\r" +
   196  		"\x1c\x15\f\x19%\x00\x06\x19\x18\ano_dict\x15\x00\x16" +
   197  		"\xf4\x03\x16\x908\x16\x908&ĕ\r<6r(\x02zx\x18" +
   198  		"\x00\x00\x00\x00\x16\x8a\x95\x03\x16\xf4\x03&\xce\xc3\n\x16\x8a\x95\x03\x14" +
   199  		"\x04\x00(\"parquet-cpp vers" +
   200  		"ion 1.5.1-SNAPSHOT\x19l" +
   201  		"\x1c\x00\x00\x1c\x00\x00\x1c\x00\x00\x1c\x00\x00\x1c\x00\x00\x1c\x00\x00\x00\xa9" +
   202  		"\x05\x00\x00PAR1")
   203  
   204  	readAllData(t, data)
   205  }