in reply to Re^4: Unsigned 64-bit integer as Judy key
in thread Unsigned 64-bit integer as Judy key

Of course not.

$ perl -MDevel::Peek -E 'Dump $_ for 1<<63,-(1<<63)' SV = IV(0x559e408d8210) at 0x559e408d8220 REFCNT = 1 FLAGS = (IOK,pIOK,IsUV) UV = 9223372036854775808 SV = IV(0x559e408d83c0) at 0x559e408d83d0 REFCNT = 1 FLAGS = (IOK,pIOK) IV = -9223372036854775808 $ perl -MJudy::L=Set -E 'say Set($j, $_, 1) for 1<<63,-(1<<63),0' 94434583711008 Coercing -9223372036854775808 to 0. Can't use negative values as keys. + at -e line 1. 94434579767256 94434579767256

Replies are listed 'Best First'.
Re^6: Unsigned 64-bit integer as Judy key
by ikegami (Patriarch) on Dec 09, 2022 at 17:58 UTC

    You didn't retrieve any information from the data structure, so you didn't test it at all. Try this:

    perl -Mv5.14 -MJudy::L=Get,Set -e' my $i = 1<<63; my $j = -$i; my $judy; Set( $judy, $i, 4 ); Set( $judy, $j, 5 ); say( ( Get( $judy, $i ) )[1] ); say( ( Get( $judy, $j ) )[1] ); '

    If you get different values, I was wrong. If you get the same value, each negative value is considered to the same as a very large positive value.

    Without the hack, it outputs 5 twice. I suspect the hack only silences the warning.

    Of course not.

    No, it isn't obvious that the keys are 65 bits (or larger) in size. In fact, they pretty obviously aren't.