Beefy Boxes and Bandwidth Generously Provided by pair Networks
Do you know where your variables are?
 
PerlMonks  

Re^2: Help me make a test case for Math::BigFloat

by fizbin (Chaplain)
on Mar 06, 2006 at 19:30 UTC ( [id://534742]=note: print w/replies, xml ) Need Help??


in reply to Re: Help me make a test case for Math::BigFloat
in thread Help me make a test case for Math::BigFloat

Yeah; I'll admit that once I pulled the code into a pretty format for the SOPW it stopped looking so ugly, convoluted, and in need of beating down into minimalness as it did when it was just four tight lines in my command window following a -e.
--
@/=map{[/./g]}qw/.h_nJ Xapou cets krht ele_ r_ra/; map{y/X_/\n /;print}map{pop@$_}@/for@/

Replies are listed 'Best First'.
Re^3: Help me make a test case for Math::BigFloat
by xdg (Monsignor) on Mar 06, 2006 at 20:39 UTC

    Along those lines, I'd suggest streamlining it even more and submitting it as a test file (i.e. use Test::More instead of print. For example:

    use strict; use warnings; use Test::More tests => 3; use bignum; sub xe{ $_[0]*log($_[0])+log(atan2(1,1)*8*$_[0])/2 + 1/(12*$_[0]) - 1/(360*($_[0]**3)) + 1/(1260*($_[0]**5)); } my ($m, $n, $r) = ( 2**96, 3*(10**6), 1*(10**6) ); my $e=exp(xe($m-$n)+xe($m-$r)-xe($m)-xe($m-$n-$r)); is( $e , 1, '$e should equal 1' ); is( 1-$e , 0, '1-$e should equal 0' ); is( 1-"$e" , 0, '1-"$e" should equal 0' );

    Gives:

    1..3 ok 1 - $e should equal 1 not ok 2 - 1-$e should equal 0 # Failed test (bigtest.pl at line 17) # got: '1' # expected: '0' ok 3 - 1-"$e" should equal 0 # Looks like you failed 1 test of 3.

    That's even easier for a module author to work with.

    -xdg

    Code written by xdg and posted on PerlMonks is public domain. It is provided as is with no warranties, express or implied, of any kind. Posted code may not have been tested. Use of posted code is at your own risk.

      Good idea - thanks.

      I eventually did find a way to simplify the math, and here's the test case I sent off:

      #!perl use strict; use warnings; use Test::More tests => 4; use bignum; my $lnev = -7 / (10**17); my $ev=exp($lnev); is( sprintf('%0.5f',$ev) , '1.00000', '($ev) is approx. 1' ); is( sprintf('%0.5f',1-$ev) , '0.00000', '(1-$ev) is approx. 0' ); is( sprintf('%0.5f',1-"$ev") , '0.00000', '(1-"$ev") is approx. 0' ); cmp_ok( $ev, '!=', 0, '$ev should not equal 0');
      Note that by futzing with the $lnev number, you can get this bug to disappear - for example, by changing the "7" to a "1".
      --
      @/=map{[/./g]}qw/.h_nJ Xapou cets krht ele_ r_ra/; map{y/X_/\n /;print}map{pop@$_}@/for@/
        Note that by futzing with the $lnev number, you can get this bug to disappear.

        I'd add that to the test case. I find it helpful to show both working and non-working variations. Easier to drill in on what's happening.

        -xdg

        Code written by xdg and posted on PerlMonks is public domain. It is provided as is with no warranties, express or implied, of any kind. Posted code may not have been tested. Use of posted code is at your own risk.

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://534742]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others admiring the Monastery: (6)
As of 2024-04-16 08:31 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found