summaryrefslogtreecommitdiff
path: root/Examples/test-suite/perl5/contract_runme.pl
blob: fb162e691aa6d974975d32cb26a68cbc9be112a8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
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");
}