-ok(!$@, "getdata croaks ($@)");
-ok($res, 'getdata invalid');
-ok($data && ref($data) eq 'HASH'
- && exists $data->{foo} && $data->{foo} eq 'z'
- && exists $data->{bar} && $data->{bar} eq 't',
- 'private data creation with arguments ok');
+is($@, '', 'getdata from wizard with arguments doesn\'t croak');
+ok($res, 'getdata from wizard with arguments returns true');
+is_deeply($data, { foo => 'z', bar => 't' },
+ 'getdata from wizard with arguments return value is ok');
+
+dispell $a, $wiz;
+
+$wiz = wizard get => sub { };
+$a = 63;
+$res = eval { cast $a, $wiz };
+is($@, '', 'cast non-data wizard doesn\'t croak');
+ok($res, 'cast non-data wizard returns true');
+
+my @data = eval { getdata $a, $wiz };
+is($@, '', 'getdata from non-data wizard doesn\'t croak');
+is_deeply(\@data, [ ], 'getdata from non-data wizard invalid returns undef');
+
+$wiz = wizard data => sub { ++$_[1] };
+my ($di, $ei) = (1, 10);
+my ($d, $e);
+cast $d, $wiz, $di;
+cast $e, $wiz, $ei;
+my $dd = getdata $d, $wiz;
+my $ed = getdata $e, $wiz;
+is($dd, 2, 'data from d is what we expected');
+is($di, 2, 'cast arguments from d were passed by alias');
+is($ed, 11, 'data from e is what we expected');
+is($ei, 11, 'cast arguments from e were passed by alias');
+$di *= 2;
+$dd = getdata $d, $wiz;
+$ed = getdata $e, $wiz;
+is($dd, 2, 'data from d wasn\'t changed');
+is($ed, 11, 'data from e wasn\'t changed');