1use strict;
2use warnings;
3use Test::More tests => 9;
4# member_pointer using pointers to member functions
5
6BEGIN { use_ok('member_pointer') }
7require_ok('member_pointer');
8
9sub check($;$;$) {
10  my($what, $expected, $actual) = @_;
11  if ($expected != $actual) {
12    die ("Failed: $what Expected: $expected Actual: $actual");
13  }
14}
15
16# Get the pointers
17
18my $area_pt = member_pointer::areapt();
19my $perim_pt = member_pointer::perimeterpt();
20
21# Create some objects
22
23my $s = new member_pointer::Square(10);
24
25# Do some calculations
26
27is(100.0, member_pointer::do_op($s,$area_pt), "Square area");
28is(40.0, member_pointer::do_op($s,$perim_pt), "Square perim");
29no strict;
30
31my $memberPtr = $member_pointer::areavar;
32$memberPtr = $member_pointer::perimetervar;
33
34# Try the variables
35is(100.0, member_pointer::do_op($s,$member_pointer::areavar), "Square area");
36is(40.0, member_pointer::do_op($s,$member_pointer::perimetervar), "Square perim");
37
38# Modify one of the variables
39$member_pointer::areavar = $perim_pt;
40
41is(40.0, member_pointer::do_op($s,$member_pointer::areavar), "Square perimeter");
42
43# Try the constants
44
45$memberPtr = $member_pointer::AREAPT;
46$memberPtr = $member_pointer::PERIMPT;
47$memberPtr = $member_pointer::NULLPT;
48
49is(100.0, member_pointer::do_op($s,$member_pointer::AREAPT), "Square area");
50is(40.0, member_pointer::do_op($s,$member_pointer::PERIMPT), "Square perim");
51
52