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 }