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

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