#!/usr/bin/perl
use warnings;
use strict;
use Test::More;
BEGIN
{
my $fixture_ok = eval q{
use Test::MockModule;
use Test::Differences;
1;
};
if ( ! $fixture_ok ) {
plan skip_all => 'Test::MockModule, Test::Differences required for this';
exit 0;
}
else {
plan tests => 4;
}
}
my $CLASS;
BEGIN
{
chdir 't' if -d 't';
unshift @INC => '../lib';
$CLASS = 'AI::Prolog';
use_ok($CLASS, ':all') or die;
}
my $database = Parser->consult(<<'END_PROLOG');
append([], X, X).
append([W|X],Y,[W|Z]) :- append(X,Y,Z).
END_PROLOG
my $query = Term->new("append(X,Y,[a,b,c,d]).");
my $engine = Engine->new($query,$database);
isa_ok $query, Term, '... and the Term shortcut';
isa_ok $engine, Engine, '... and the Engine shortcut';
my $prolog = AI::Prolog->new(<<'END_PROLOG');
member(X,[X|Xs]).
member(X,[_|Tail]) :- member(X,Tail).
END_PROLOG
$prolog->query('member(3, [1,2,3,4]).');
ok $prolog->results, '... and unifying with anonymous variables should succeed';
$prolog = AI::Prolog->new(<<'END_PROLOG');
member(X,[X|Xs]).
member(X,[_|Tail]) :- member(X,Tail).
thief(alan).
steals(bob, _, _) :- thief(bob).
thief(bob).
END_PROLOG
$prolog->query('steals(bob,X,Y).');
ok $prolog->results, '... even if we have multiple anonymous variables';