1#! perl
2
3use strict;
4use warnings;
5
6use Test::More 0.89;
7
8local $SIG{__WARN__} = sub { fail("Got unexpected warning"); diag($_[0]) };
9
10if ($] >= 5.010000) {
11	is (eval <<'END', 1, 'state compiles') or diag $@;
12	use experimental 'state';
13	state $foo = 1;
14	is($foo, 1, '$foo is 1');
15	1;
16END
17}
18
19if ($] >= 5.010001) {
20	if (eval '
21		no warnings "experimental";
22		use feature "switch";
23		if(0) { when(3) {} }
24		1;
25	') {
26		is (eval <<'END', 1, 'switch compiles') or diag $@;
27		use experimental 'switch';
28		sub bar { 1 };
29		given(1) {
30			when (\&bar) {
31				pass("bar matches 1");
32			}
33			default {
34				fail("bar matches 1");
35			}
36		}
37		1;
38END
39	} else {
40		is (eval <<'END', 1, 'switch compiles') or diag $@;
41		use experimental 'switch';
42		sub bar { 1 };
43		given(1) {
44			whereso (\&bar) {
45				pass("bar matches 1");
46			}
47			fail("bar matches 1");
48		}
49		1;
50END
51	}
52}
53
54if ($] >= 5.010001) {
55	is (eval <<'END', 1, 'smartmatch compiles') or diag $@;
56	use experimental 'smartmatch';
57	{ package Baz; use overload "~~" => sub { 1 }; }
58	is(1 ~~ bless({}, "Baz"), 1, "is 1");
59	1;
60END
61}
62
63if ($] >= 5.018) {
64	is (eval <<'END', 1, 'lexical subs compiles') or diag $@;
65	use experimental 'lexical_subs';
66	my sub foo { 1 };
67	is(foo(), 1, "foo is 1");
68	1;
69END
70}
71
72if ($] >= 5.026000) {
73	is (eval <<'END', 1, 'declared refs compiles') or diag $@;
74	use experimental 'declared_refs';
75	my @b;
76	my \@a = \@b;
77	is(\@a, \@b, '@a and @b are the same after \@a=\@b');
78	1;
79END
80}
81elsif ($] >= 5.021005) {
82	is (eval <<'END', 1, 'ref aliasing compiles') or diag $@;
83	use experimental 'refaliasing';
84	my (@a, @b);
85	\@a = \@b;
86	is(\@a, \@b, '@a and @b are the same after \@a=\@b');
87	1;
88END
89}
90
91done_testing;
92
93