use strict; use warnings; use List::Util; use Config; # to determine nvsize use Test::More tests => 2; my ($uniq_count1, $uniq_count2, $equiv); if($Config{nvsize} == 8) { # NV is either 'double' or 8-byte 'long double' # The 2 values should be unequal - but just in case perl is buggy: $equiv = 1 if 1.4142135623730951 == 1.4142135623730954; $uniq_count1 = List::Util::uniqnum (1.4142135623730951, 1.4142135623730954 ); $uniq_count2 = List::Util::uniqnum('1.4142135623730951', '1.4142135623730954'); } elsif(length(sqrt(2)) > 25) { # NV is either IEEE 'long double' or '__float128' # The 2 values should be unequal - but just in case perl is buggy: $equiv = 1 if 1.7320508075688772935274463415058722 == 1.73205080756887729352744634150587224; $uniq_count1 = List::Util::uniqnum (1.7320508075688772935274463415058722, 1.73205080756887729352744634150587224 ); $uniq_count2 = List::Util::uniqnum('1.7320508075688772935274463415058722', '1.73205080756887729352744634150587224'); } else { # NV is extended precision 'long double' # The 2 values should be unequal - but just in case perl is buggy: $equiv = 1 if 2.2360679774997896963 == 2.23606797749978969634; $uniq_count1 = List::Util::uniqnum (2.2360679774997896963, 2.23606797749978969634 ); $uniq_count2 = List::Util::uniqnum('2.2360679774997896963', '2.23606797749978969634'); } if($equiv) { is($uniq_count1, 1, 'uniqnum preserves uniqness of high precision floats'); is($uniq_count2, 1, 'uniqnum preserves uniqness of high precision floats (stringified)'); } else { is($uniq_count1, 2, 'uniqnum preserves uniqness of high precision floats'); is($uniq_count2, 2, 'uniqnum preserves uniqness of high precision floats (stringified)'); }Thread Previous | Thread Next