2 # This is a generated file and should not be edited directly.
3 # look into generate-tests.pl instead
8 # This class, designed to help simplify the tests, is very much in a transitional
9 # state. But it works as well as the previous version at the moment. I'm checking
10 # it in just to clean up my local build (and save a remote copy as I take my
11 # the machine it lives on vacation). Should have more updates to this over the
12 # next several days. --colomon, Sept 3rd 2009.
16 has $.angle_in_degrees;
20 our @radians-to-whatever = (1, 180 / pi, 200 / pi, 1 / (2 * pi));
21 our @degrees-to-whatever = ((312689/99532) / 180, 1, 200 / 180, 1 / 360);
22 our @degrees-to-whatever-num = @degrees-to-whatever.map({ .Num });
25 multi method new(Int $angle_in_degrees is copy, $result is copy) {
26 self.bless(*, :$angle_in_degrees, :$result);
29 method complex($imaginary_part_in_radians, $base) {
30 my $z_in_radians = $.angle_in_degrees / 180.0 * pi + ($imaginary_part_in_radians)i;
31 $z_in_radians * pir::get_global__Ps('@radians-to-whatever')[$base];
35 $.angle_in_degrees * pir::get_global__Ps('@degrees-to-whatever-num')[$base];
39 $.angle_in_degrees * pir::get_global__Ps('@degrees-to-whatever')[$base];
48 AngleAndResult.new(-360, 0),
49 AngleAndResult.new(135 - 360, 1/2*sqrt(2)),
50 AngleAndResult.new(330 - 360, -0.5),
51 AngleAndResult.new(0, 0),
52 AngleAndResult.new(30, 0.5),
53 AngleAndResult.new(45, 1/2*sqrt(2)),
54 AngleAndResult.new(90, 1),
55 AngleAndResult.new(135, 1/2*sqrt(2)),
56 AngleAndResult.new(180, 0),
57 AngleAndResult.new(225, -1/2*sqrt(2)),
58 AngleAndResult.new(270, -1),
59 AngleAndResult.new(315, -1/2*sqrt(2)),
60 AngleAndResult.new(360, 0),
61 AngleAndResult.new(30 + 360, 0.5),
62 AngleAndResult.new(225 + 360, -1/2*sqrt(2)),
63 AngleAndResult.new(720, 0)
66 my @cosines = @sines.map({ AngleAndResult.new($_.angle_in_degrees - 90, $_.result) });
68 my @sinhes = @sines.grep({ $_.angle_in_degrees < 500 }).map({ AngleAndResult.new($_.angle_in_degrees,
69 (exp($_.num(Radians)) - exp(-$_.num(Radians))) / 2.0)});
71 my @coshes = @sines.grep({ $_.angle_in_degrees < 500 }).map({ AngleAndResult.new($_.angle_in_degrees,
72 (exp($_.num(Radians)) + exp(-$_.num(Radians))) / 2.0)});
74 my @official_bases = (Radians, Degrees, Gradians, Circles);
80 next if abs(sinh($angle.num('radians'))) < 1e-6; my $desired_result = 1.0 / sinh($angle.num('radians'));
83 is_approx(cosech($angle.num(Radians)), $desired_result,
84 "cosech(Num) - {$angle.num(Radians)} default");
85 for @official_bases -> $base {
86 is_approx(cosech($angle.num($base), $base), $desired_result,
87 "cosech(Num) - {$angle.num($base)} $base");
91 is_approx(cosech(:x($angle.num(Radians))), $desired_result,
92 "cosech(:x(Num)) - {$angle.num(Radians)} default");
93 for @official_bases -> $base {
94 is_approx(cosech(:x($angle.num($base)), :base($base)), $desired_result,
95 "cosech(:x(Num)) - {$angle.num($base)} $base");
99 is_approx($angle.num(Radians).cosech, $desired_result,
100 "Num.cosech - {$angle.num(Radians)} default");
101 for @official_bases -> $base {
102 is_approx($angle.num($base).cosech($base), $desired_result,
103 "Num.cosech - {$angle.num($base)} $base");
107 is_approx(cosech($angle.rat(Radians)), $desired_result,
108 "cosech(Rat) - {$angle.rat(Radians)} default");
109 for @official_bases -> $base {
110 is_approx(cosech($angle.rat($base), $base), $desired_result,
111 "cosech(Rat) - {$angle.rat($base)} $base");
115 is_approx(cosech(:x($angle.rat(Radians))), $desired_result,
116 "cosech(:x(Rat)) - {$angle.rat(Radians)} default");
117 for @official_bases -> $base {
118 is_approx(cosech(:x($angle.rat($base)), :base($base)), $desired_result,
119 "cosech(:x(Rat)) - {$angle.rat($base)} $base");
123 is_approx($angle.rat(Radians).cosech, $desired_result,
124 "Rat.cosech - {$angle.rat(Radians)} default");
125 for @official_bases -> $base {
126 is_approx($angle.rat($base).cosech($base), $desired_result,
127 "Rat.cosech - {$angle.rat($base)} $base");
131 is_approx(cosech($angle.int(Degrees), Degrees), $desired_result,
132 "cosech(Int) - {$angle.int(Degrees)} degrees");
133 is_approx($angle.int(Degrees).cosech(Degrees), $desired_result,
134 "Int.cosech - {$angle.int(Degrees)} degrees");
137 my Complex $zp0 = $angle.complex(0.0, Radians);
138 my Complex $sz0 = $desired_result + 0i;
139 my Complex $zp1 = $angle.complex(1.0, Radians);
140 my Complex $sz1 = { 1.0 / sinh($_) }($zp1);
141 my Complex $zp2 = $angle.complex(2.0, Radians);
142 my Complex $sz2 = { 1.0 / sinh($_) }($zp2);
144 # cosech(Complex) tests
145 is_approx(cosech($zp0), $sz0, "cosech(Complex) - $zp0 default");
146 is_approx(cosech($zp1), $sz1, "cosech(Complex) - $zp1 default");
147 is_approx(cosech($zp2), $sz2, "cosech(Complex) - $zp2 default");
149 for @official_bases -> $base {
150 my Complex $z = $angle.complex(0.0, $base);
151 is_approx(cosech($z, $base), $sz0, "cosech(Complex) - $z $base");
153 $z = $angle.complex(1.0, $base);
154 is_approx(cosech($z, $base), $sz1, "cosech(Complex) - $z $base");
156 $z = $angle.complex(2.0, $base);
157 is_approx(cosech($z, $base), $sz2, "cosech(Complex) - $z $base");
160 # Complex.cosech tests
161 is_approx($zp0.cosech, $sz0, "Complex.cosech - $zp0 default");
162 is_approx($zp1.cosech, $sz1, "Complex.cosech - $zp1 default");
163 is_approx($zp2.cosech, $sz2, "Complex.cosech - $zp2 default");
165 for @official_bases -> $base {
166 my Complex $z = $angle.complex(0.0, $base);
167 is_approx($z.cosech($base), $sz0, "Complex.cosech - $z $base");
169 $z = $angle.complex(1.0, $base);
170 is_approx($z.cosech($base), $sz1, "Complex.cosech - $z $base");
172 $z = $angle.complex(2.0, $base);
173 is_approx($z.cosech($base), $sz2, "Complex.cosech - $z $base");
177 is(cosech(Inf), 0, "cosech(Inf) - default");
178 is(cosech(-Inf), "-0", "cosech(-Inf) - default");
179 for @official_bases -> $base
181 is(cosech(Inf, $base), 0, "cosech(Inf) - $base");
182 is(cosech(-Inf, $base), "-0", "cosech(-Inf) - $base");
190 next if abs(sinh($angle.num('radians'))) < 1e-6; my $desired_result = 1.0 / sinh($angle.num('radians'));
193 is_approx(cosech(acosech($desired_result)), $desired_result,
194 "acosech(Num) - {$angle.num(Radians)} default");
195 for @official_bases -> $base {
196 is_approx(cosech(acosech($desired_result, $base), $base), $desired_result,
197 "acosech(Num) - {$angle.num($base)} $base");
201 is_approx(cosech(acosech(:x($desired_result))), $desired_result,
202 "acosech(:x(Num)) - {$angle.num(Radians)} default");
203 for @official_bases -> $base {
204 is_approx(cosech(acosech(:x($desired_result),
206 $base), $desired_result,
207 "acosech(:x(Num)) - {$angle.num($base)} $base");
211 is_approx($desired_result.Num.acosech.cosech, $desired_result,
212 "Num.acosech - {$angle.num(Radians)} default");
213 for @official_bases -> $base {
214 is_approx($desired_result.Num.acosech($base).cosech($base), $desired_result,
215 "Num.acosech - {$angle.num($base)} $base");
218 # acosech(Complex) tests
219 for ($desired_result + 0i, $desired_result + .5i, $desired_result + 2i) -> $z {
220 is_approx(cosech(acosech($z)), $z,
221 "acosech(Complex) - {$angle.num(Radians)} default");
222 for @official_bases -> $base {
223 is_approx(cosech(acosech($z, $base), $base), $z,
224 "acosech(Complex) - {$angle.num($base)} $base");
226 is_approx($z.acosech.cosech, $z,
227 "Complex.acosech - {$angle.num(Radians)} default");
228 for @official_bases -> $base {
229 is_approx($z.acosech($base).cosech($base), $z,
230 "Complex.acosech - {$angle.num($base)} $base");
235 for (-2/2, -1/2, 1/2, 2/2) -> $desired_result
238 is_approx(cosech(acosech($desired_result)), $desired_result,
239 "acosech(Rat) - $desired_result default");
240 for @official_bases -> $base {
241 is_approx(cosech(acosech($desired_result, $base), $base), $desired_result,
242 "acosech(Rat) - $desired_result $base");
246 is_approx($desired_result.acosech.cosech, $desired_result,
247 "Rat.acosech - $desired_result default");
248 for @official_bases -> $base {
249 is_approx($desired_result.acosech($base).cosech($base), $desired_result,
250 "Rat.acosech - $desired_result $base");
253 next unless $desired_result.denominator == 1;
256 is_approx(cosech(acosech($desired_result.numerator)), $desired_result,
257 "acosech(Int) - $desired_result default");
258 for @official_bases -> $base {
259 is_approx(cosech(acosech($desired_result.numerator, $base), $base), $desired_result,
260 "acosech(Int) - $desired_result $base");
264 is_approx($desired_result.numerator.acosech.cosech, $desired_result,
265 "Int.acosech - $desired_result default");
266 for @official_bases -> $base {
267 is_approx($desired_result.numerator.acosech($base).cosech($base), $desired_result,
268 "Int.acosech - $desired_result $base");
274 # vim: ft=perl6 nomodifiable