#! perl use strict; use warnings; use File::Spec::Functions; use Test::More tests => 14; my $module = 'P5NCI::Library'; use_ok( $module ) or exit; my $lib = P5NCI::Library->new( library => 'nci_test', package => 'NCI', path => 'src', ); ok( $lib->isa( $module ), 'test library should be loadable' ) or exit; my $double_double = $lib->load_function( 'double_double', 'dd' ); my $result = $double_double->( 1.0 ) - 2.0; cmp_ok( $result, '<', 0.0001, 'dd call should work' ); $result = $double_double->( 3.14 ) - 6.28; cmp_ok( $result, '<', 0.0001, '... for multiple calls' ); my $double_int = $lib->install_function( 'double_int', 'ii' ); is( $double_int->( 1 ), 2, 'ii call should work' ); is( $double_int->( 3 ), 6, '... for multiple calls' ); $lib->install_function( 'double_float', 'ff' ); is( NCI::double_float( 1.0 ), 2.0, 'ff call should work' ); ok( abs( NCI::double_float(0.314) - 0.628) < 0.0001, '... for multiple calls' ); $lib = P5NCI::Library->new( library => 'nci_test' ); $lib->install_function( 'multiply_ints', 'iii' ); is( multiply_ints( 10, 20 ), 200, 'iii call should work' ); is( multiply_ints( 5, 5 ), 25, '... for multiple calls' ); $lib->install_function( 'change_string', 'tt' ); is( change_string( 'b' ), "b string\n", 'tt call should work' ); is( change_string( 'XXX' ), "X string\n", '... for multiple calls' ); $lib->install_function( 'square_root', 'ff' ); is( square_root( 9.0 ), 3.0, 'square_root() should work' ); $lib->install_function( 'make_struct', 'pv' ); $lib->install_function( 'set_x_value', 'vpi' ); $lib->install_function( 'get_x_value', 'ip' ); $lib->install_function( 'free_struct', 'vp' ); $lib->install_function( 'inspect_struct', 'ip' ); my $struct = make_struct(); set_x_value( $struct, 100 ); is( get_x_value( $struct ), 100, 'pointer access should work' ); free_struct( $struct );