On Sat, Apr 26, 2014 at 05:27:58PM -0400, Paul Bennett wrote:

Based on the results below, which show failures only on all linux-ld perls,

and only failures on any linux-ld perl, what would you all recommend as my

next debugging step(s)?

http://matrix.cpantesters.org/?dist=Path-Hilbert%201.001

I could make more tests, and do more-verbose testing, but if the math isn't

working (specifically 2 ** 7 != 128, or at least log(128) / log(2) != 7),

I'm not entirely sure where I'd even start looking.

Based on the results below, which show failures only on all linux-ld perls,

and only failures on any linux-ld perl, what would you all recommend as my

next debugging step(s)?

http://matrix.cpantesters.org/?dist=Path-Hilbert%201.001

I could make more tests, and do more-verbose testing, but if the math isn't

working (specifically 2 ** 7 != 128, or at least log(128) / log(2) != 7),

I'm not entirely sure where I'd even start looking.

2 ** int(log($n) / log(2)) == $n or confess("Side-length $n is not a power of 2");

I'd want to see what the value of that expression is, if it doesn't equal

$n. This could be due to bad rounding in int(log($n) / log(2)).

So that either means finding a machine with the right architecture to test

on, or put out a new release with a more specific error message.

At the same time, you can get the answer to your next question in advance:

print out the result of log($n) / log(2) before you convert it to an

integer.

(Also, your error message doesn't accurately portray the problem - you're

not just checking that the expression is a power of 2 -- which it has to

be, since the last thing you do is raise 2 to the nth power), but that it

equals a specific value.)

FWIW, you can check if a number is a power of 2 much more easily, by

leveraging the fact that binary is a base 2 system:

($n & ($n - 1)) == 0 or confess("Side-length $n is not a power of 2");

*much* faster than doing floating point operations :)