@@ -49,9 +49,40 @@ is-deeply 170141183460469231731687303715884105725.is-prime, False,
49
49
is-deeply 6864797660130609714981900799081393217269435300143305409394463459185543183397656052122559640661454554977296311391480858037121987999716643812574028291115057151 . is-prime ,
50
50
True , ' M13 is prime' ;
51
51
52
- ok is-prime (2.0 ), ' correct coersion (Rat)' ;
53
- ok is-prime (2e0 ), ' correct coersion (Num)' ;
54
- ok is-prime (' 2.0' ), ' correct coersion (Str)' ;
55
- nok is-prime (2.5 ), ' decimal numbers are not prime (Rat)' ;
56
- nok is-prime (2e5 ), ' decimal numbers are not prime (Num)' ;
57
- nok is-prime (-2 ), ' negative numbers are not prime' ;
52
+ subtest ' coersion from different types' => {
53
+ my @ prime := ' 2.0' , 3 , <5 >, 2.0 , <3.0 >, 5e0 , <2e0 >, <3+0i >, <5+0i >,
54
+ FatRat . new (2 ,1 ), FatRat . new (6 ,2 );
55
+ my @ un-prime := ' 4.0' , 6 , <8 >, 4.0 , <6.0 >, 8e0 , <4e0 >, <6+0i >, <8+0i >,
56
+ ' 2.1' , 2.3 , <3.4 >, 5.1e0 , <2.7e0 >, <3.8+0i >, <5.3+0i >, <3.8e0+0i >,
57
+ <5.3e0+0i >, ' -4.0' , ' −4.0' , -6 , <-8 >, -4.0 , <-6.0 >, -8e0 , <-4e0 >,
58
+ <-6+0i >, <-8+0i >, FatRat . new (4 ,1 ), FatRat . new (12 ,2 );
59
+ plan 2 * (@ prime + @ un-prime );
60
+
61
+ for @ prime {
62
+ my $ desc := " { . perl } { .^ name } is prime" ;
63
+ is-deeply is-prime ($ _ ), True , " $ desc (sub form)" ;
64
+ is-deeply . is-prime , True , " $ desc (method form)" ;
65
+ }
66
+ for @ un-prime {
67
+ my $ desc := " { . perl } { .^ name } is NOT prime" ;
68
+ is-deeply is-prime ($ _ ), False , " $ desc (sub form)" ;
69
+ is-deeply . is-prime , False , " $ desc (method form)" ;
70
+ }
71
+ }
72
+
73
+ subtest ' Complex.is-prime with Complex that cannot be Real throw' => {
74
+ plan 2 * my @ tests := <3-3i >, <2+5i >, <-3-3i >, <-2+5i >, <0+31337i >;
75
+ for @ tests {
76
+ throws-like { . is-prime }, X::Numeric::Real , " { . perl } (method form)" ;
77
+ throws-like { is-prime $ _ }, X::Numeric::Real , " { . perl } (sub form)" ;
78
+ }
79
+ }
80
+
81
+ # Some implementations have lazily-reduced Rational addition, which makes it
82
+ # possible to cause bugs in `.is-prime` impls that test for .denominator == 1
83
+ is-deeply (<3/2 > + < 3/ 2 > ). is-prime , True , ' lazily-reduced Rat (method)' ;
84
+ is-deeply is-prime (<3/2 > + < 3/ 2 > ), True , ' lazily-reduced Rat (sub)' ;
85
+ is-deeply (FatRat . new (3 ,2 ) + FatRat . new (3 ,2 )). is-prime , True ,
86
+ ' lazily-reduced FatRat (method)' ;
87
+ is-deeply is-prime (FatRat . new (3 ,2 ) + FatRat . new (3 ,2 )), True ,
88
+ ' lazily-reduced FatRat (sub)' ;
0 commit comments