# test
use strict ;
use warnings ;
use Data::TreeDumper ;
use Test::Exception ;
use Test::Warn;
use Test::NoWarnings qw(had_no_warnings);
use Test::More 'no_plan';
use Test::Block qw($Plan);
use Scalar::Cycle::Manual ;
{
local $Plan = {'access' => 25} ;
my $cyclic_variable = new Scalar::Cycle::Manual( qw( first second third ) ) ;
is($cyclic_variable, 'first', 'access') ;
$cyclic_variable->increment() ;
is($cyclic_variable, 'second', 'increment') ;
$cyclic_variable++ ;
is($cyclic_variable, 'third', '++') ;
$cyclic_variable++ ;
is($cyclic_variable, 'first', 'loops') ;
$cyclic_variable->decrement ;
is($cyclic_variable, 'third', 'decrement') ;
$cyclic_variable--;
is($cyclic_variable, 'second', '--') ;
is($cyclic_variable->next, 'third', 'next') ;
is($cyclic_variable, 'second', 'position unchanged') ;
is($cyclic_variable->previous, 'first', 'next') ;
is($cyclic_variable, 'second', 'position unchanged') ;
$cyclic_variable->auto_increment(1) ;
is($cyclic_variable, 'second', 'position unchanged by auto_increment call') ;
is($cyclic_variable, 'third', 'position incremented by access') ;
$cyclic_variable->auto_increment(0) ;
is($cyclic_variable, 'first', 'position unchanged') ;
is($cyclic_variable, 'first', 'position unchanged') ;
is("$cyclic_variable", 'first', 'string') ;
is(<$cyclic_variable>, 'first', 'first <>') ;
is($cyclic_variable, 'second', 'after <>') ;
is(<$cyclic_variable>, 'second', 'second <>') ;
is($cyclic_variable->next, 'first', 'next at -1') ;
$cyclic_variable->reset ;
is("$cyclic_variable", 'first', 'reset') ;
is($cyclic_variable->previous, 'third', 'previous at 0') ;
my $cv = $cyclic_variable ;
is($cv, 'first', 'copy constructor') ;
my $string = "value = " . $cyclic_variable++ . '' ;
is($string, 'value = first', 'copy constructor') ;
my $auto_increment = $cyclic_variable->auto_increment() ;
is($auto_increment, 0, 'auto_increment query') ;
$cyclic_variable->auto_increment(1) ;
$auto_increment = $cyclic_variable->auto_increment() ;
is($auto_increment, 1, 'auto_increment query') ;
}