@@ -6,13 +6,13 @@ use libm::support::{Float, MinInt};
66use crate :: domain:: get_domain;
77use crate :: op:: OpITy ;
88use crate :: run_cfg:: { int_range, iteration_count} ;
9- use crate :: { CheckCtx , MathOp , linear_ints, logspace} ;
9+ use crate :: { CheckCtx , GeneratorKind , MathOp , linear_ints, logspace} ;
1010
1111/// Generate a sequence of inputs that eiher cover the domain in completeness (for smaller float
1212/// types and single argument functions) or provide evenly spaced inputs across the domain with
1313/// approximately `u32::MAX` total iterations.
1414pub trait SpacedInput < Op > {
15- fn get_cases ( ctx : & CheckCtx ) -> ( impl Iterator < Item = Self > + Send , u64 ) ;
15+ fn get_cases ( ctx : CheckCtx ) -> ( impl Iterator < Item = Self > + Send , u64 ) ;
1616}
1717
1818/// Construct an iterator from `logspace` and also calculate the total number of steps expected
@@ -87,8 +87,8 @@ macro_rules! impl_spaced_input {
8787 where
8888 Op : MathOp <RustArgs = Self , FTy = $fty>,
8989 {
90- fn get_cases( ctx: & CheckCtx ) -> ( impl Iterator <Item = Self >, u64 ) {
91- let max_steps0 = iteration_count( ctx, 0 ) ;
90+ fn get_cases( ctx: CheckCtx ) -> ( impl Iterator <Item = Self >, u64 ) {
91+ let max_steps0 = iteration_count( & ctx, 0 ) ;
9292 // `f16` and `f32` can have exhaustive tests.
9393 match value_count:: <Op :: FTy >( ) {
9494 Some ( steps0) if steps0 <= max_steps0 => {
@@ -97,7 +97,7 @@ macro_rules! impl_spaced_input {
9797 ( EitherIter :: A ( iter0) , steps0)
9898 }
9999 _ => {
100- let ( iter0, steps0) = logspace_steps:: <Op >( ctx, 0 , max_steps0) ;
100+ let ( iter0, steps0) = logspace_steps:: <Op >( & ctx, 0 , max_steps0) ;
101101 let iter0 = iter0. map( |v| ( v, ) ) ;
102102 ( EitherIter :: B ( iter0) , steps0)
103103 }
@@ -109,9 +109,9 @@ macro_rules! impl_spaced_input {
109109 where
110110 Op : MathOp <RustArgs = Self , FTy = $fty>,
111111 {
112- fn get_cases( ctx: & CheckCtx ) -> ( impl Iterator <Item = Self >, u64 ) {
113- let max_steps0 = iteration_count( ctx, 0 ) ;
114- let max_steps1 = iteration_count( ctx, 1 ) ;
112+ fn get_cases( ctx: CheckCtx ) -> ( impl Iterator <Item = Self >, u64 ) {
113+ let max_steps0 = iteration_count( & ctx, 0 ) ;
114+ let max_steps1 = iteration_count( & ctx, 1 ) ;
115115 // `f16` can have exhaustive tests.
116116 match value_count:: <Op :: FTy >( ) {
117117 Some ( count) if count <= max_steps0 && count <= max_steps1 => {
@@ -120,8 +120,8 @@ macro_rules! impl_spaced_input {
120120 ( EitherIter :: A ( iter) , count. checked_mul( count) . unwrap( ) )
121121 }
122122 _ => {
123- let ( iter0, steps0) = logspace_steps:: <Op >( ctx, 0 , max_steps0) ;
124- let ( iter1, steps1) = logspace_steps:: <Op >( ctx, 1 , max_steps1) ;
123+ let ( iter0, steps0) = logspace_steps:: <Op >( & ctx, 0 , max_steps0) ;
124+ let ( iter1, steps1) = logspace_steps:: <Op >( & ctx, 1 , max_steps1) ;
125125 let iter = iter0. flat_map( move |first| {
126126 iter1. clone( ) . map( move |second| ( first, second) )
127127 } ) ;
@@ -136,10 +136,10 @@ macro_rules! impl_spaced_input {
136136 where
137137 Op : MathOp <RustArgs = Self , FTy = $fty>,
138138 {
139- fn get_cases( ctx: & CheckCtx ) -> ( impl Iterator <Item = Self >, u64 ) {
140- let max_steps0 = iteration_count( ctx, 0 ) ;
141- let max_steps1 = iteration_count( ctx, 1 ) ;
142- let max_steps2 = iteration_count( ctx, 2 ) ;
139+ fn get_cases( ctx: CheckCtx ) -> ( impl Iterator <Item = Self >, u64 ) {
140+ let max_steps0 = iteration_count( & ctx, 0 ) ;
141+ let max_steps1 = iteration_count( & ctx, 1 ) ;
142+ let max_steps2 = iteration_count( & ctx, 2 ) ;
143143 // `f16` can be exhaustive tested if `LIBM_EXTENSIVE_TESTS` is incresed.
144144 match value_count:: <Op :: FTy >( ) {
145145 Some ( count)
@@ -153,9 +153,9 @@ macro_rules! impl_spaced_input {
153153 ( EitherIter :: A ( iter) , count. checked_pow( 3 ) . unwrap( ) )
154154 }
155155 _ => {
156- let ( iter0, steps0) = logspace_steps:: <Op >( ctx, 0 , max_steps0) ;
157- let ( iter1, steps1) = logspace_steps:: <Op >( ctx, 1 , max_steps1) ;
158- let ( iter2, steps2) = logspace_steps:: <Op >( ctx, 2 , max_steps2) ;
156+ let ( iter0, steps0) = logspace_steps:: <Op >( & ctx, 0 , max_steps0) ;
157+ let ( iter1, steps1) = logspace_steps:: <Op >( & ctx, 1 , max_steps1) ;
158+ let ( iter2, steps2) = logspace_steps:: <Op >( & ctx, 2 , max_steps2) ;
159159
160160 let iter = iter0
161161 . flat_map( move |first| iter1. clone( ) . map( move |second| ( first, second) ) )
@@ -175,10 +175,10 @@ macro_rules! impl_spaced_input {
175175 where
176176 Op : MathOp <RustArgs = Self , FTy = $fty>,
177177 {
178- fn get_cases( ctx: & CheckCtx ) -> ( impl Iterator <Item = Self >, u64 ) {
179- let range0 = int_range( ctx, 0 ) ;
180- let max_steps0 = iteration_count( ctx, 0 ) ;
181- let max_steps1 = iteration_count( ctx, 1 ) ;
178+ fn get_cases( ctx: CheckCtx ) -> ( impl Iterator <Item = Self >, u64 ) {
179+ let range0 = int_range( & ctx, 0 ) ;
180+ let max_steps0 = iteration_count( & ctx, 0 ) ;
181+ let max_steps1 = iteration_count( & ctx, 1 ) ;
182182 match value_count:: <Op :: FTy >( ) {
183183 Some ( count1) if count1 <= max_steps1 => {
184184 let ( iter0, steps0) = linear_ints( range0, max_steps0) ;
@@ -188,7 +188,7 @@ macro_rules! impl_spaced_input {
188188 }
189189 _ => {
190190 let ( iter0, steps0) = linear_ints( range0, max_steps0) ;
191- let ( iter1, steps1) = logspace_steps:: <Op >( ctx, 1 , max_steps1) ;
191+ let ( iter1, steps1) = logspace_steps:: <Op >( & ctx, 1 , max_steps1) ;
192192
193193 let iter = iter0. flat_map( move |first| {
194194 iter1. clone( ) . map( move |second| ( first, second) )
@@ -205,10 +205,10 @@ macro_rules! impl_spaced_input {
205205 where
206206 Op : MathOp <RustArgs = Self , FTy = $fty>,
207207 {
208- fn get_cases( ctx: & CheckCtx ) -> ( impl Iterator <Item = Self >, u64 ) {
209- let max_steps0 = iteration_count( ctx, 0 ) ;
210- let range1 = int_range( ctx, 1 ) ;
211- let max_steps1 = iteration_count( ctx, 1 ) ;
208+ fn get_cases( ctx: CheckCtx ) -> ( impl Iterator <Item = Self >, u64 ) {
209+ let max_steps0 = iteration_count( & ctx, 0 ) ;
210+ let range1 = int_range( & ctx, 1 ) ;
211+ let max_steps1 = iteration_count( & ctx, 1 ) ;
212212 match value_count:: <Op :: FTy >( ) {
213213 Some ( count0) if count0 <= max_steps0 => {
214214 let ( iter1, steps1) = linear_ints( range1, max_steps1) ;
@@ -218,7 +218,7 @@ macro_rules! impl_spaced_input {
218218 ( EitherIter :: A ( iter) , count0. checked_mul( steps1) . unwrap( ) )
219219 }
220220 _ => {
221- let ( iter0, steps0) = logspace_steps:: <Op >( ctx, 0 , max_steps0) ;
221+ let ( iter0, steps0) = logspace_steps:: <Op >( & ctx, 0 , max_steps0) ;
222222 let ( iter1, steps1) = linear_ints( range1, max_steps1) ;
223223
224224 let iter = iter0. flat_map( move |first| {
@@ -242,12 +242,11 @@ impl_spaced_input!(f64);
242242impl_spaced_input ! ( f128) ;
243243
244244/// Create a test case iterator for extensive inputs. Also returns the total test case count.
245- pub fn get_test_cases < Op > (
246- ctx : & CheckCtx ,
247- ) -> ( impl Iterator < Item = Op :: RustArgs > + Send + use < ' _ , Op > , u64 )
245+ pub fn get_test_cases < Op > ( ctx : CheckCtx ) -> ( impl Iterator < Item = Op :: RustArgs > + Send , u64 )
248246where
249247 Op : MathOp ,
250248 Op :: RustArgs : SpacedInput < Op > ,
251249{
250+ assert_eq ! ( ctx. gen_kind, GeneratorKind :: Spaced ) ;
252251 Op :: RustArgs :: get_cases ( ctx)
253252}
0 commit comments