Skip to content

Commit

Permalink
[coverage] Cover nummy trig: cotan and acotan
Browse files Browse the repository at this point in the history
Also covers acotan bug fixed by
rakudo/rakudo@8e9fd0a
  • Loading branch information
zoffixznet committed Oct 19, 2016
1 parent dd714f8 commit d6cb68a
Showing 1 changed file with 86 additions and 1 deletion.
87 changes: 86 additions & 1 deletion S02-types/num.t
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ use Test;

#L<S02/The C<Num> and C<Rat> Types/Perl 6 intrinsically supports big integers>

plan 88;
plan 90;

isa-ok( EVAL(1.Num.perl), Num, 'EVAL 1.Num.perl is Num' );
is-approx( EVAL(1.Num.perl), 1, 'EVAL 1.Num.perl is 1' );
Expand Down Expand Up @@ -571,6 +571,91 @@ ok Num === Num, 'Num === Num should be truthy, and not die';
is-approx asec(my num $ = 2/√2), my num $ = Ο€/4, '2/√2';
is-approx asec(my num $ = -2/√2), my num $ = 3/4*Ο€, '-2/√2';
}

subtest 'cotan(num)' => {
plan 38;

cmp-ok cotan(my num $ ), '===', NaN, 'uninitialized';
cmp-ok cotan(my num $ = NaN), '===', NaN, 'NaN';
cmp-ok cotan(my num $ = -∞), '===', NaN, '-∞';
cmp-ok cotan(my num $ = ∞), '===', NaN, '+∞';

cmp-ok cotan(my num $ = 0e0), '==', my num $ = ∞, '0e0';
cmp-ok cotan(my num $ = -0e0), '==', my num $ = -∞, '-0e0';

is-approx cotan(my num $ = Ο€/12), my num $ = 2+√3, 'Ο€/12';
is-approx cotan(my num $ = Ο€/10), my num $ = √(5+2*√5), 'Ο€/10';
is-approx cotan(my num $ = Ο€/8), my num $ = 1+√2, 'Ο€/8';
is-approx cotan(my num $ = Ο€/6), my num $ = √3, 'Ο€/6';
is-approx cotan(my num $ = Ο€/5), my num $ = √(1+2/√5), 'Ο€/5';
is-approx cotan(my num $ = Ο€/4), my num $ = 1e0, 'Ο€/4';
is-approx cotan(my num $ = 3*Ο€/10), my num $ = √(5-2*√5), '3*Ο€/10';
is-approx cotan(my num $ = Ο€/3), my num $ = √3/3, 'Ο€/3';
is-approx cotan(my num $ = 3*Ο€/8), my num $ = √2-1, '3*Ο€/8';
is-approx cotan(my num $ = 2*Ο€/5), my num $ = √(1-2/√5), '2*Ο€/5';
is-approx cotan(my num $ = 5*Ο€/12), my num $ = 2-√3, '5*Ο€/12';
is-approx cotan(my num $ = Ο€/2), my num $ = 0e0, '-Ο€/2';
is-approx cotan(my num $ = 3*Ο€/2), my num $ = 0e0, '3*Ο€/2';
is-approx cotan(my num $ = 5*Ο€/2), my num $ = 0e0, '5*Ο€/2';

is-approx cotan(my num $ = -Ο€/12), my num $ = -(2+√3), '-Ο€/12';
is-approx cotan(my num $ = -Ο€/10), my num $ = -√(5+2*√5), '-Ο€/10';
is-approx cotan(my num $ = -Ο€/8), my num $ = -(1+√2), '-Ο€/8';
is-approx cotan(my num $ = -Ο€/6), my num $ = -√3, '-Ο€/6';
is-approx cotan(my num $ = -Ο€/5), my num $ = -√(1+2/√5), '-Ο€/5';
is-approx cotan(my num $ = -Ο€/4), my num $ = -1e0, '-Ο€/4';
is-approx cotan(my num $ = -3*Ο€/10), my num $ = -√(5-2*√5), '-3*Ο€/10';
is-approx cotan(my num $ = -Ο€/3), my num $ = -√3/3, '-Ο€/3';
is-approx cotan(my num $ = -3*Ο€/8), my num $ = -(√2-1), '-3*Ο€/8';
is-approx cotan(my num $ = -2*Ο€/5), my num $ = -√(1-2/√5), '-2*Ο€/5';
is-approx cotan(my num $ = -5*Ο€/12), my num $ = -(2-√3), '-5*Ο€/12';
is-approx cotan(my num $ = -Ο€/2), my num $ = 0e0, '-Ο€/2';
is-approx cotan(my num $ = -3*Ο€/2), my num $ = 0e0, '-3*Ο€/2';
is-approx cotan(my num $ = -5*Ο€/2), my num $ = 0e0, '-5*Ο€/2';

# Since we don't have perfect Ο€, cheetsy-doodle to get "infinity"
# NOTE: the / on tan is to compensate for Ο€'s inexactness
is-approx cotan(my num $ = Ο€), my num $ = -tan(Ο€/2)/2, 'Ο€';
is-approx cotan(my num $ = -Ο€), my num $ = tan(Ο€/2)/2, '-Ο€';
is-approx cotan(my num $ = Ο„), my num $ = -tan(Ο€/2)/4, 'Ο„';
is-approx cotan(my num $ = -Ο„), my num $ = tan(Ο€/2)/4, '-Ο„';
}

subtest 'acotan(num)' => {
plan 28;

cmp-ok acotan(my num $ ), '===', NaN, 'uninitialized';
cmp-ok acotan(my num $ = NaN), '===', NaN, 'NaN';

is-approx acotan(my num $ = ∞), my num $ = 0e0, '∞';
is-approx acotan(my num $ = -∞), my num $ = -0e0, '-∞';
is-approx acotan(my num $ = 0e0), my num $ = Ο€/2, '0e0';
is-approx acotan(my num $ = -0e0), my num $ = -Ο€/2, '-0e0';

is-approx acotan(my num $ = 2+√3), my num $ = Ο€/12, '2+√3';
is-approx acotan(my num $ = √(5+2*√5)), my num $ = Ο€/10, '√(5+2*√5)';
is-approx acotan(my num $ = 1+√2), my num $ = Ο€/8, '1+√2';
is-approx acotan(my num $ = √3), my num $ = Ο€/6, '√3';
is-approx acotan(my num $ = √(1+2/√5)), my num $ = Ο€/5, '√(1+2/√5)';
is-approx acotan(my num $ = 1e0), my num $ = Ο€/4, '1e0';
is-approx acotan(my num $ = √(5-2*√5)), my num $ = 3*Ο€/10, '√(5-2*√5)';
is-approx acotan(my num $ = √3/3), my num $ = Ο€/3, '√3/3';
is-approx acotan(my num $ = √2-1), my num $ = 3*Ο€/8, '√2-1';
is-approx acotan(my num $ = √(1-2/√5)), my num $ = 2*Ο€/5, '√(1-2/√5)';
is-approx acotan(my num $ = 2-√3), my num $ = 5*Ο€/12, '2-√3';

is-approx acotan(my num $ = -(2+√3)), my num $ = -Ο€/12, '-(2+√3)';
is-approx acotan(my num $ = -√(5+2*√5)), my num $ = -Ο€/10, '-√(5+2*√5)';
is-approx acotan(my num $ = -(1+√2)), my num $ = -Ο€/8, '-(1+√2)';
is-approx acotan(my num $ = -√3), my num $ = -Ο€/6, '-√3';
is-approx acotan(my num $ = -√(1+2/√5)), my num $ = -Ο€/5, '-√(1+2/√5)';
is-approx acotan(my num $ = -1e0), my num $ = -Ο€/4, '-1e0';
is-approx acotan(my num $ = -√(5-2*√5)), my num $ = -3*Ο€/10, '-√(5-2*√5)';
is-approx acotan(my num $ = -√3/3), my num $ = -Ο€/3, '-√3/3';
is-approx acotan(my num $ = -(√2-1)), my num $ = -3*Ο€/8, '-(√2-1)';
is-approx acotan(my num $ = -√(1-2/√5)), my num $ = -2*Ο€/5, '-√(1-2/√5)';
is-approx acotan(my num $ = -(2-√3)), my num $ = -5*Ο€/12, '-(2-√3)';
}
}

# vim: ft=perl6

0 comments on commit d6cb68a

Please sign in to comment.