use warnings;
use autodie;
use Statistics::RserveClient::Connection;
use Statistics::RserveClient::REXP::Logical;
use Statistics::RserveClient::REXP::Symbol;
use Statistics::RserveClient::REXP::String;
use Statistics::RserveClient::REXP::Integer;
use Statistics::RserveClient::REXP::Double;
use Test::More; # tests => 12;
SKIP: {
eval {
my $object = Statistics::RserveClient::Connection->new('localhost');
if ( !ref($object) || !UNIVERSAL::can( $object, 'can' ) ) {
die "Can't create a connection\n";
}
};
skip "Looks like Rserve is not reachable. Skipping test.", 12 if $@;
my $cnx
= new_ok( 'Statistics::RserveClient::Connection' => ['localhost'] );
my @expected_true_scalar = (1);
my $x = new Statistics::RserveClient::REXP::Logical;
$x->setValues( \@expected_true_scalar );
$cnx->assign( 'x', $x );
my @true_scalar = $cnx->evalString('x');
# print join(':', @true_scalar) . "\n";
# print join(':', @expected_true_scalar) . "\n";
is_deeply( \@true_scalar, \@expected_true_scalar, 'scalar TRUE value' )
or diag explain @true_scalar;
my @expected_false_scalar = (0);
$x->setValues( \@expected_false_scalar );
$cnx->assign( 'x', $x );
my @false_scalar = $cnx->evalString('x');
is_deeply( \@false_scalar, \@expected_false_scalar, 'scalar FALSE value' )
or diag explain @false_scalar;
my @expected_bool_vector = ( 1, 0, 1 );
$x->setValues( \@expected_bool_vector );
$cnx->assign( 'x', $x );
my @bool_vector = $cnx->evalString('x');
is_deeply( \@bool_vector, \@expected_bool_vector, 'boolean array' )
or diag explain @bool_vector;
my @expected_char_scalar = 'z';
$x = new Statistics::RserveClient::REXP::String;
$x->setValues( \@expected_char_scalar );
$cnx->assign( 'x', $x );
my @char_scalar = $cnx->evalString('x');
is_deeply( \@char_scalar, \@expected_char_scalar,
'single-char string scalar' )
or diag explain @char_scalar;
my @expected_char_vector = ( 'a', 'b', 'c', 'd' );
$x->setValues( \@expected_char_vector );
$cnx->assign( 'x', $x );
my @char_vector = $cnx->evalString('x');
is_deeply( \@char_vector, \@expected_char_vector,
'vector of single-char strings' )
or diag explain @char_vector;
my @expected_string_scalar = 'Dec';
$x->setValues( \@expected_string_scalar );
$cnx->assign( 'x', $x );
my @string_scalar = $cnx->evalString('x');
is_deeply( \@string_scalar, \@expected_string_scalar, 'string scalar' )
or diag explain @string_scalar;
my @expected_string_vector = ( 'Jan', 'Feb', 'Mar' );
$x->setValues( \@expected_string_vector );
$cnx->assign( 'x', $x );
my @string_vector = $cnx->evalString('x');
is_deeply( \@string_vector, \@expected_string_vector,
'vector of strings' )
or diag explain @string_vector;
my @expected_int_scalar = 123;
$x = new Statistics::RserveClient::REXP::Integer;
$x->setValues( \@expected_int_scalar );
$cnx->assign( 'x', $x );
my @int_scalar = $cnx->evalString('x');
is_deeply( \@int_scalar, \@expected_int_scalar, 'single-int scalar' )
or diag explain @int_scalar;
my @expected_int_vector = ( 101 .. 110 );
$x->setValues( \@expected_int_vector );
$cnx->assign( 'x', $x );
my @int_vector = $cnx->evalString('x');
is_deeply( \@int_vector, \@expected_int_vector, 'vector of ints' )
or diag explain @int_vector;
my @expected_double_scalar = 1.5;
$x = new Statistics::RserveClient::REXP::Double;
$x->setValues( \@expected_double_scalar );
$cnx->assign( 'x', $x );
my @double_scalar = $cnx->evalString('x');
is_deeply( \@double_scalar, \@expected_double_scalar, 'double scalar' )
or diag explain @double_scalar;
my @expected_double_vector = ( 0.5, 1, 1.5, 2 );
$x->setValues( \@expected_double_vector );
$cnx->assign( 'x', $x );
my @double_vector = $cnx->evalString('x');
is_deeply( \@double_vector, \@expected_double_vector,
'vector of doubles' )
or diag explain @double_vector;
}
done_testing();