summaryrefslogtreecommitdiff
path: root/Examples/test-suite/perl5/contract_runme.pl
diff options
context:
space:
mode:
Diffstat (limited to 'Examples/test-suite/perl5/contract_runme.pl')
-rwxr-xr-xExamples/test-suite/perl5/contract_runme.pl78
1 files changed, 78 insertions, 0 deletions
diff --git a/Examples/test-suite/perl5/contract_runme.pl b/Examples/test-suite/perl5/contract_runme.pl
new file mode 100755
index 0000000..fb162e6
--- /dev/null
+++ b/Examples/test-suite/perl5/contract_runme.pl
@@ -0,0 +1,78 @@
+#!/usr/bin/perl
+use strict;
+use warnings;
+use Test::More tests => 32;
+BEGIN { use_ok('contract') }
+require_ok('contract');
+
+# adapted from ../python/contract_runme.py
+{
+ ok(contract::test_preassert(1,2), "good preassertion");
+ eval { contract::test_preassert(-1) };
+ like($@, qr/\bRuntimeError\b/, "bad preassertion");
+
+ ok(contract::test_postassert(3), "good postassertion");
+ eval { contract::test_postassert(-3) };
+ like($@, qr/\bRuntimeError\b/, "bad postassertion");
+
+ ok(contract::test_prepost(2,3), "good prepost");
+ ok(contract::test_prepost(5,-4), "good prepost");
+ eval { contract::test_prepost(-3,4); };
+ like($@, qr/\bRuntimeError\b/, "bad preassertion");
+ eval { contract::test_prepost(4,-10) };
+ like($@, qr/\bRuntimeError\b/, "bad postassertion");
+}
+{
+ my $f = contract::Foo->new();
+ ok($f->test_preassert(4,5), "method pre");
+ eval { $f->test_preassert(-2,3) };
+ like($@, qr/\bRuntimeError\b/, "method pre bad");
+
+ ok($f->test_postassert(4), "method post");
+ eval { $f->test_postassert(-4) };
+ like($@, qr/\bRuntimeError\b/, "method post bad");
+
+ ok($f->test_prepost(3,4), "method prepost");
+ ok($f->test_prepost(4,-3), "method prepost");
+ eval { $f->test_prepost(-4,2) };
+ like($@, qr/\bRuntimeError\b/, "method pre bad");
+ eval { $f->test_prepost(4,-10) };
+ like($@, qr/\bRuntimeError\b/, "method post bad");
+}
+{
+ ok(contract::Foo::stest_prepost(4,0), "static method prepost");
+ eval { contract::Foo::stest_prepost(-4,2) };
+ like($@, qr/\bRuntimeError\b/, "static method pre bad");
+ eval { contract::Foo::stest_prepost(4,-10) };
+ like($@, qr/\bRuntimeError\b/, "static method post bad");
+}
+{
+ my $b = contract::Bar->new();
+ eval { $b->test_prepost(2,-4) };
+ like($@, qr/\bRuntimeError\b/, "inherit pre bad");
+}
+{
+ my $d = contract::D->new();
+ eval { $d->foo(-1,1,1,1,1) };
+ like($@, qr/\bRuntimeError\b/, "inherit pre D");
+ eval { $d->foo(1,-1,1,1,1) };
+ like($@, qr/\bRuntimeError\b/, "inherit pre D");
+ eval { $d->foo(1,1,-1,1,1) };
+ like($@, qr/\bRuntimeError\b/, "inherit pre D");
+ eval { $d->foo(1,1,1,-1,1) };
+ like($@, qr/\bRuntimeError\b/, "inherit pre D");
+ eval { $d->foo(1,1,1,1,-1) };
+ like($@, qr/\bRuntimeError\b/, "inherit pre D");
+
+ eval { $d->bar(-1,1,1,1,1) };
+ like($@, qr/\bRuntimeError\b/, "inherit pre D");
+ eval { $d->bar(1,-1,1,1,1) };
+ like($@, qr/\bRuntimeError\b/, "inherit pre D");
+ eval { $d->bar(1,1,-1,1,1) };
+ like($@, qr/\bRuntimeError\b/, "inherit pre D");
+ eval { $d->bar(1,1,1,-1,1) };
+ like($@, qr/\bRuntimeError\b/, "inherit pre D");
+ eval { $d->bar(1,1,1,1,-1) };
+ like($@, qr/\bRuntimeError\b/, "inherit pre D");
+}
+