Skip to content

Commit 2291592

Browse files
committed
Add test for recursive is and as
1 parent b6f8de1 commit 2291592

15 files changed

+1519
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
test: (forward v) = {
2+
std::cout << "v is empty = (v is void)$" << std::endl;
3+
std::cout << "v is std::monostate = (v is std::monostate)$" << std::endl;
4+
std::cout << "v is int = (v is int)$" << std::endl;
5+
std::cout << "v is std::optional<int> = (v is std::optional<int>)$" << std::endl;
6+
std::cout << "v is std::unique_ptr<int> = (v is std::unique_ptr<int>)$" << std::endl;
7+
std::cout << "v is std::variant<int, double> = (v is std::variant<int, double>)$" << std::endl;
8+
std::cout << "v is VA<0> = (v is VA<0>)$" << std::endl;
9+
std::cout << "v is VC = (v is VC)$" << std::endl;
10+
std::cout << "v is VD = (v is VD)$" << std::endl;
11+
std::cout << "v is *VA<0> = (v is *VA<0>)$" << std::endl;
12+
std::cout << "v is *VC = (v is *VC)$" << std::endl;
13+
std::cout << "v is *VD = (v is *VD)$" << std::endl;
14+
15+
std::cout << std::endl;
16+
}
17+
18+
set_and_test: (forward v, what, forward value) = {
19+
std::cout << "set v to (what)$" << std::endl;
20+
v = value;
21+
test(v);
22+
}
23+
24+
main: () -> int = {
25+
vc : VC = ();
26+
vd : VD = ();
27+
28+
v: std::variant<std::monostate, std::optional<int>, std::unique_ptr<int>, std::variant<int, double>, *VA<0>> = ();
29+
30+
test(v);
31+
32+
set_and_test(v, "std::optional<int>()", std::optional<int>());
33+
set_and_test(v, "std::optional<int>(42)", std::optional<int>(42));
34+
set_and_test(v, "std::unique_ptr<int>()", std::unique_ptr<int>());
35+
set_and_test(v, "std::unique_ptr<int>(44)", new<int>(44));
36+
set_and_test(v, "std::variant<int, double>(1)", std::variant<int, double>(1));
37+
set_and_test(v, "*VC", vc&);
38+
set_and_test(v, "*VD", vd&);
39+
}
40+
41+
template<int I>
42+
struct X { operator int() const { return I; } };
43+
44+
struct ThrowingConstruction {
45+
constexpr ThrowingConstruction() = default;
46+
ThrowingConstruction(int) { throw 1; }
47+
};
48+
49+
PotentiallyThrowingVariant: type == std::variant<std::monostate, ThrowingConstruction, X<0>, X<1>, X<2>>;
50+
51+
void set_to_valueless_by_exception(auto& v) try {
52+
v.template emplace<1>(42);
53+
} catch (...) {}
54+
55+
VA: @polymorphic_base <I:int> type = {}
56+
57+
VC: type = {
58+
this: VA<0>;
59+
this: VA<1>;
60+
}
61+
62+
VD: type = {
63+
this: VA<0>;
64+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,111 @@
1+
v is empty = true
2+
v is std::monostate = true
3+
v is int = false
4+
v is std::optional<int> = false
5+
v is std::unique_ptr<int> = false
6+
v is std::variant<int, double> = false
7+
v is VA<0> = false
8+
v is VC = false
9+
v is VD = false
10+
v is *VA<0> = false
11+
v is *VC = false
12+
v is *VD = false
13+
14+
set v to std::optional<int>()
15+
v is empty = true
16+
v is std::monostate = false
17+
v is int = false
18+
v is std::optional<int> = true
19+
v is std::unique_ptr<int> = false
20+
v is std::variant<int, double> = false
21+
v is VA<0> = false
22+
v is VC = false
23+
v is VD = false
24+
v is *VA<0> = false
25+
v is *VC = false
26+
v is *VD = false
27+
28+
set v to std::optional<int>(42)
29+
v is empty = false
30+
v is std::monostate = false
31+
v is int = true
32+
v is std::optional<int> = true
33+
v is std::unique_ptr<int> = false
34+
v is std::variant<int, double> = false
35+
v is VA<0> = false
36+
v is VC = false
37+
v is VD = false
38+
v is *VA<0> = false
39+
v is *VC = false
40+
v is *VD = false
41+
42+
set v to std::unique_ptr<int>()
43+
v is empty = true
44+
v is std::monostate = false
45+
v is int = false
46+
v is std::optional<int> = false
47+
v is std::unique_ptr<int> = true
48+
v is std::variant<int, double> = false
49+
v is VA<0> = false
50+
v is VC = false
51+
v is VD = false
52+
v is *VA<0> = false
53+
v is *VC = false
54+
v is *VD = false
55+
56+
set v to std::unique_ptr<int>(44)
57+
v is empty = false
58+
v is std::monostate = false
59+
v is int = true
60+
v is std::optional<int> = false
61+
v is std::unique_ptr<int> = true
62+
v is std::variant<int, double> = false
63+
v is VA<0> = false
64+
v is VC = false
65+
v is VD = false
66+
v is *VA<0> = false
67+
v is *VC = false
68+
v is *VD = false
69+
70+
set v to std::variant<int, double>(1)
71+
v is empty = false
72+
v is std::monostate = false
73+
v is int = true
74+
v is std::optional<int> = false
75+
v is std::unique_ptr<int> = false
76+
v is std::variant<int, double> = true
77+
v is VA<0> = false
78+
v is VC = false
79+
v is VD = false
80+
v is *VA<0> = false
81+
v is *VC = false
82+
v is *VD = false
83+
84+
set v to *VC
85+
v is empty = false
86+
v is std::monostate = false
87+
v is int = false
88+
v is std::optional<int> = false
89+
v is std::unique_ptr<int> = false
90+
v is std::variant<int, double> = false
91+
v is VA<0> = true
92+
v is VC = true
93+
v is VD = false
94+
v is *VA<0> = true
95+
v is *VC = true
96+
v is *VD = false
97+
98+
set v to *VD
99+
v is empty = false
100+
v is std::monostate = false
101+
v is int = false
102+
v is std::optional<int> = false
103+
v is std::unique_ptr<int> = false
104+
v is std::variant<int, double> = false
105+
v is VA<0> = true
106+
v is VC = false
107+
v is VD = true
108+
v is *VA<0> = true
109+
v is *VC = false
110+
v is *VD = true
111+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,111 @@
1+
v is empty = true
2+
v is std::monostate = true
3+
v is int = false
4+
v is std::optional<int> = false
5+
v is std::unique_ptr<int> = false
6+
v is std::variant<int, double> = false
7+
v is VA<0> = false
8+
v is VC = false
9+
v is VD = false
10+
v is *VA<0> = false
11+
v is *VC = false
12+
v is *VD = false
13+
14+
set v to std::optional<int>()
15+
v is empty = true
16+
v is std::monostate = false
17+
v is int = false
18+
v is std::optional<int> = true
19+
v is std::unique_ptr<int> = false
20+
v is std::variant<int, double> = false
21+
v is VA<0> = false
22+
v is VC = false
23+
v is VD = false
24+
v is *VA<0> = false
25+
v is *VC = false
26+
v is *VD = false
27+
28+
set v to std::optional<int>(42)
29+
v is empty = false
30+
v is std::monostate = false
31+
v is int = true
32+
v is std::optional<int> = true
33+
v is std::unique_ptr<int> = false
34+
v is std::variant<int, double> = false
35+
v is VA<0> = false
36+
v is VC = false
37+
v is VD = false
38+
v is *VA<0> = false
39+
v is *VC = false
40+
v is *VD = false
41+
42+
set v to std::unique_ptr<int>()
43+
v is empty = true
44+
v is std::monostate = false
45+
v is int = false
46+
v is std::optional<int> = false
47+
v is std::unique_ptr<int> = true
48+
v is std::variant<int, double> = false
49+
v is VA<0> = false
50+
v is VC = false
51+
v is VD = false
52+
v is *VA<0> = false
53+
v is *VC = false
54+
v is *VD = false
55+
56+
set v to std::unique_ptr<int>(44)
57+
v is empty = false
58+
v is std::monostate = false
59+
v is int = true
60+
v is std::optional<int> = false
61+
v is std::unique_ptr<int> = true
62+
v is std::variant<int, double> = false
63+
v is VA<0> = false
64+
v is VC = false
65+
v is VD = false
66+
v is *VA<0> = false
67+
v is *VC = false
68+
v is *VD = false
69+
70+
set v to std::variant<int, double>(1)
71+
v is empty = false
72+
v is std::monostate = false
73+
v is int = true
74+
v is std::optional<int> = false
75+
v is std::unique_ptr<int> = false
76+
v is std::variant<int, double> = true
77+
v is VA<0> = false
78+
v is VC = false
79+
v is VD = false
80+
v is *VA<0> = false
81+
v is *VC = false
82+
v is *VD = false
83+
84+
set v to *VC
85+
v is empty = false
86+
v is std::monostate = false
87+
v is int = false
88+
v is std::optional<int> = false
89+
v is std::unique_ptr<int> = false
90+
v is std::variant<int, double> = false
91+
v is VA<0> = true
92+
v is VC = true
93+
v is VD = false
94+
v is *VA<0> = true
95+
v is *VC = true
96+
v is *VD = false
97+
98+
set v to *VD
99+
v is empty = false
100+
v is std::monostate = false
101+
v is int = false
102+
v is std::optional<int> = false
103+
v is std::unique_ptr<int> = false
104+
v is std::variant<int, double> = false
105+
v is VA<0> = true
106+
v is VC = false
107+
v is VD = true
108+
v is *VA<0> = true
109+
v is *VC = false
110+
v is *VD = true
111+

0 commit comments

Comments
 (0)