sext icon indicating copy to clipboard operation
sext copied to clipboard

encode maps keeping keys in order.

Open benoitc opened this issue 8 years ago • 6 comments

to keep maps in order, we first sort it by keys by transforming them as list. Then we process the keys/values in order.

ex:

2> B = sext:encode(#{ a => 1, b=>1 }).
<<17,1,0,0,0,2,12,176,128,8,10,0,0,0,2,12,177,0,8,10,0,0,
  0,2>>
3> B = sext:encode(#{ b => 1, a=>1 }).
<<17,1,0,0,0,2,12,176,128,8,10,0,0,0,2,12,177,0,8,10,0,0,
  0,2>>

benoitc avatar Oct 22 '17 20:10 benoitc

I noticed that there are no quickcheck tests for maps, so I started adding some. This highlighted that some more implementation is needed – not least prefix encoding.

uwiger avatar Oct 23 '17 09:10 uwiger

i can probably add that. Did you already started the work on it?

benoitc avatar Oct 23 '17 09:10 benoitc

I started working on it. I got pretty far, but then – after starting a 1M test run of prop_sort(), discovered that the keysort order in maps differs from the normal term ordering: floats are always considered larger than ints.

Needless to say, this poses a significant challenge for sext. I haven't yet figured out how to solve that in a backwards-compatible way (or even breaking compatibility just for map keys).

uwiger avatar Oct 23 '17 14:10 uwiger

@benoitc could you check out #31 please?

uwiger avatar Oct 24 '17 18:10 uwiger

@uwiger sorry I missed it ... I will later today thanks :)

benoitc avatar Nov 06 '17 18:11 benoitc

Actually, we (Thomas Arts and I) have determined that there is still some work needed. I'll try to get back to it as quickly as I can.

uwiger avatar Nov 06 '17 22:11 uwiger