#![ cfg_attr( feature = "no_std", no_std ) ]
#![ allow( clippy ::reversed_empty_ranges ) ]
#[ allow( unused_imports ) ]
use interval_adapter as the_module;
#[ allow( unused_imports ) ]
use test_tools::exposed::*;
use test_tools :: a_id;
tests_impls!
{
fn empty_interval_half_open()
{
use the_module :: { IterableInterval, NonIterableInterval, Bound };
let src = 5..5;
a_id!( src.closed_left(), 5 );
a_id!( src.closed_right(), 4 ); a_id!( src.closed_len(), 0 );
let mut count = 0;
for _ in 5..5
{
count += 1;
}
a_id!( count, 0 );
}
fn empty_interval_closed()
{
use the_module :: { IterableInterval, NonIterableInterval };
let src = 5..=4;
a_id!( src.closed_left(), 5 );
a_id!( src.closed_right(), 4 );
}
fn single_element_interval_closed()
{
use the_module :: { IterableInterval, NonIterableInterval };
let src = 5..=5;
a_id!( src.closed_left(), 5 );
a_id!( src.closed_right(), 5 );
a_id!( src.closed_len(), 1 );
let mut count = 0;
let mut last = 0;
for i in 5..=5
{
count += 1;
last = i;
}
a_id!( count, 1 );
a_id!( last, 5 );
}
fn single_element_interval_half_open()
{
use the_module :: { IterableInterval, NonIterableInterval };
let src = 5..6;
a_id!( src.closed_left(), 5 );
a_id!( src.closed_right(), 5 ); a_id!( src.closed_len(), 1 );
let mut count = 0;
let mut last = 0;
for i in 5..6
{
count += 1;
last = i;
}
a_id!( count, 1 );
a_id!( last, 5 );
}
fn single_element_at_zero()
{
use the_module :: { IterableInterval, NonIterableInterval };
let src = 0..=0;
a_id!( src.closed_left(), 0 );
a_id!( src.closed_right(), 0 );
a_id!( src.closed_len(), 1 );
let mut count = 0;
for i in 0..=0
{
count += 1;
a_id!( i, 0 );
}
a_id!( count, 1 );
}
fn negative_interval_closed()
{
use the_module :: { IterableInterval, NonIterableInterval };
let src = -5..=-1;
a_id!( src.closed_left(), -5 );
a_id!( src.closed_right(), -1 );
a_id!( src.closed_len(), 5 );
let mut count = 0;
let expected = [ -5, -4, -3, -2, -1 ];
for i in -5..=-1
{
a_id!( i, expected[ count ] );
count += 1;
}
a_id!( count, 5 );
}
fn negative_interval_half_open()
{
use the_module :: { IterableInterval, NonIterableInterval };
let src = -5..-1;
a_id!( src.closed_left(), -5 );
a_id!( src.closed_right(), -2 ); a_id!( src.closed_len(), 4 );
let mut count = 0;
let expected = [ -5, -4, -3, -2 ];
for i in -5..-1
{
a_id!( i, expected[ count ] );
count += 1;
}
a_id!( count, 4 );
}
fn mixed_sign_interval()
{
use the_module :: { IterableInterval, NonIterableInterval };
let src = -2..=3;
a_id!( src.closed_left(), -2 );
a_id!( src.closed_right(), 3 );
a_id!( src.closed_len(), 6 );
let mut count = 0;
let expected = [ -2, -1, 0, 1, 2, 3 ];
for i in -2..=3
{
a_id!( i, expected[ count ] );
count += 1;
}
a_id!( count, 6 );
}
fn crossing_zero_half_open()
{
use the_module :: { IterableInterval, NonIterableInterval };
let src = -3..2;
a_id!( src.closed_left(), -3 );
a_id!( src.closed_right(), 1 ); a_id!( src.closed_len(), 5 );
let mut count = 0;
let expected = [ -3, -2, -1, 0, 1 ];
for i in -3..2
{
a_id!( i, expected[ count ] );
count += 1;
}
a_id!( count, 5 );
}
fn unbounded_left_closed_conversion()
{
use the_module :: { NonIterableInterval, Bound };
let src = ..=5;
a_id!( src.left(), Bound ::< isize >::Unbounded );
a_id!( src.right(), Bound ::Included( 5 ) );
a_id!( NonIterableInterval ::< isize >::closed_left( &src ), 0 ); a_id!( NonIterableInterval ::< isize >::closed_right( &src ), 5 );
}
fn unbounded_right_closed_conversion()
{
use the_module :: { NonIterableInterval, Bound };
let src = 5..;
a_id!( src.left(), Bound ::Included( 5 ) );
a_id!( src.right(), Bound ::< isize >::Unbounded );
a_id!( NonIterableInterval ::< isize >::closed_left( &src ), 5 );
a_id!( NonIterableInterval ::< isize >::closed_right( &src ), isize ::MAX ); }
fn fully_unbounded_conversion()
{
use the_module :: { NonIterableInterval, Bound };
let src = ..;
a_id!( src.left(), Bound ::< isize >::Unbounded );
a_id!( src.right(), Bound ::< isize >::Unbounded );
a_id!( NonIterableInterval ::< isize >::closed_left( &src ), 0 ); a_id!( NonIterableInterval ::< isize >::closed_right( &src ), isize ::MAX ); }
fn array_conversion_empty()
{
use the_module :: { IntoInterval, NonIterableInterval };
let src = [ 5, 5 ];
let interval = src.into_interval();
a_id!( interval.closed_left(), 5 );
a_id!( interval.closed_right(), 5 );
a_id!( interval.closed_len(), 1 ); }
fn tuple_conversion_negative()
{
use the_module :: { IntoInterval, NonIterableInterval };
let src = ( -10, -5 );
let interval = src.into_interval();
a_id!( interval.closed_left(), -10 );
a_id!( interval.closed_right(), -5 );
a_id!( interval.closed_len(), 6 );
}
fn bound_tuple_excluded_both()
{
use the_module :: { IntoInterval, NonIterableInterval, Bound };
let src = ( Bound ::Excluded( 0 ), Bound ::Excluded( 5 ) );
let interval = src.into_interval();
a_id!( interval.closed_left(), 1 ); a_id!( interval.closed_right(), 4 ); a_id!( interval.closed_len(), 4 );
}
fn bound_tuple_mixed_bounds()
{
use the_module :: { IntoInterval, NonIterableInterval, Bound };
let src = ( Bound ::Excluded( 0 ), Bound ::Included( 5 ) );
let interval = src.into_interval();
a_id!( interval.closed_left(), 1 );
a_id!( interval.closed_right(), 5 );
a_id!( interval.closed_len(), 5 );
}
}
tests_index!
{
empty_interval_half_open,
empty_interval_closed,
single_element_interval_closed,
single_element_interval_half_open,
single_element_at_zero,
negative_interval_closed,
negative_interval_half_open,
mixed_sign_interval,
crossing_zero_half_open,
unbounded_left_closed_conversion,
unbounded_right_closed_conversion,
fully_unbounded_conversion,
array_conversion_empty,
tuple_conversion_negative,
bound_tuple_excluded_both,
bound_tuple_mixed_bounds,
}