The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#                              -*- Mode: Perl -*- 
# $Basename: basic.t $
# $Revision: 1.11 $
# Author          : Ulrich Pfeifer
# Created On      : Sat Dec 20 17:04:10 1997
# Last Modified By: Ulrich Pfeifer
# Last Modified On: Tue Apr 26 16:00:30 2005
# Language        : CPerl
# Update Count    : 118
# Status          : Unknown, Use with caution!
# 
# (C) Copyright 1997, Ulrich Pfeifer, all rights reserved.
# 
# 

{
  my $test;

  sub test (& ) {
    my $arg = shift;
    my $result = eval {&$arg};

    $test++;
    print "$test: $@\n" if $@;
    print 'not ' if $@ or not $result;
    print 'ok ', $test, "\n";
  }
}

BEGIN {
  my $num_tests = 0;
  open(SELF, "< $0") or die "Could not open '$0': $!\n";
  while (defined ($_ = <SELF>)) {
    $num_tests++ if /^test/;
  }
  $| = 1;
  print "1..$num_tests\n";
}

use Math::ematica qw(:PACKET :TYPE);

my $ml;

test {$ml = new Math::ematica '-linklaunch', '-linkname', 'math -mathlink'};
test {$ml->NextPacket == INPUTNAMEPKT};

test {$ml->PutFunction('Sin', 1)};
test {$ml->PutDouble(0)};
test {$ml->EndPacket};
test {$ml->Flush};
test {$ml->NewPacket};
test {$ml->NextPacket == RETURNPKT};
test {my $r = $ml->GetNext; $r == MLTKREAL or $r == MLTKINT};
test {$ml->GetDouble == 0};


test {$ml->PutFunction('Table', 2)};
test {$ml->PutFunction('Sin', 1)};
test {$ml->PutSymbol('x')};
test {$ml->PutFunction('List',4)};
test {$ml->PutSymbol('x')};
test {$ml->PutDouble(0)};
test {$ml->PutDouble(1)};
test {$ml->PutDouble(0.5)};
test {$ml->EndPacket};
test {$ml->Flush};

test {$ml->NewPacket};
test {$ml->NextPacket == RETURNPKT};
test {$ml->GetNext == MLTKFUNC};
test { my ($name, $nargs) = $ml->GetFunction; $$name eq 'List' and $nargs == 3};

test {my $r = $ml->GetNext; $r == MLTKREAL or $r == MLTKINT};
test {$ml->GetNext == MLTKREAL};
test {$ml->GetNext == MLTKREAL};

test {$ml->PutFunction('Table', 2)};
test {$ml->PutFunction('Sin', 1)};
test {$ml->PutSymbol('x')};
test {$ml->PutFunction('List',4)};
test {$ml->PutSymbol('x')};
test {$ml->PutDouble(0)};
test {$ml->PutDouble(1)};
test {$ml->PutDouble(0.5)};
test {$ml->EndPacket};
test {$ml->Flush};

test {$ml->NewPacket};
test {$ml->NextPacket == RETURNPKT};
test {$ml->GetNext == MLTKFUNC};
test { my @t = $ml->GetRealList; @t == 3 };

test { $ml->ErrorMessage =~ /everything \s+ ok/ix };

# ExportString[Plot[Tan[x], {x, -3, 3}],"eps"]
test {$ml->PutFunction('ExportString', 2)};
test {$ml->PutFunction('Plot', 2)};
test {$ml->PutFunction('Tan', 1)};
test {$ml->PutSymbol('x')};
test {$ml->PutFunction('List',3)};
test {$ml->PutSymbol('x')};
test {$ml->PutDouble(-3)};
test {$ml->PutDouble(3)};
test {$ml->PutString("eps")};
test {$ml->EndPacket};
test {$ml->Flush};

test {$ml->NewPacket};
test {$ml->NextPacket == DISPLAYPKT};
test {$ml->GetNext == MLTKSTR};
test {length($ml->GetByteString) == 0};

test {$ml->NextPacket == DISPLAYPKT};
test {$ml->GetNext == MLTKSTR};
test {$ml->GetByteString =~ /^%!/};