1use crate::{assert_js, assert_ts_def};
2
3#[test]
4fn expressions() {
5 assert_js!(
6 r#"
7pub fn go() {
8 True
9 False
10 Nil
11}
12"#
13 );
14}
15
16#[test]
17fn constants() {
18 assert_js!(
19 r#"
20pub const a = True
21pub const b = False
22pub const c = Nil
23"#,
24 );
25}
26
27#[test]
28fn constants_typescript() {
29 assert_ts_def!(
30 r#"
31pub const a = True
32pub const b = False
33pub const c = Nil
34"#,
35 );
36}
37
38#[test]
39fn operators() {
40 assert_js!(
41 r#"
42pub fn go() {
43 True && True
44 False || False
45}
46"#,
47 );
48}
49
50#[test]
51fn assigning() {
52 assert_js!(
53 r#"
54pub fn go(x, y) {
55 let assert True = x
56 let assert False = x
57 let assert Nil = y
58}
59"#,
60 );
61}
62
63// https://github.com/gleam-lang/gleam/issues/1112
64// differentiate between prelude constructors and custom type constructors
65#[test]
66fn shadowed_bools_and_nil() {
67 assert_js!(
68 r#"
69pub type True { True False Nil }
70pub fn go(x, y) {
71 let assert True = x
72 let assert False = x
73 let assert Nil = y
74}
75"#,
76 );
77}
78
79#[test]
80fn shadowed_bools_and_nil_typescript() {
81 assert_ts_def!(
82 r#"
83pub type True { True False Nil }
84pub fn go(x, y) {
85 let assert True = x
86 let assert False = x
87 let assert Nil = y
88}
89"#,
90 );
91}
92
93#[test]
94fn equality() {
95 assert_js!(
96 r#"
97pub fn go(a, b) {
98 a == True
99 a != True
100 a == False
101 a != False
102 a == a
103 a != a
104 b == Nil
105 b != Nil
106 b == b
107}
108"#,
109 );
110}
111
112#[test]
113fn case() {
114 assert_js!(
115 r#"
116pub fn go(a) {
117 case a {
118 True -> 1
119 False -> 0
120 }
121}
122"#,
123 );
124}
125
126#[test]
127fn nil_case() {
128 assert_js!(
129 r#"
130pub fn go(a) {
131 case a {
132 Nil -> 0
133 }
134}
135"#,
136 );
137}
138
139#[test]
140fn negation() {
141 assert_js!(
142 "pub fn negate(x) {
143 !x
144}"
145 );
146}
147
148#[test]
149fn negation_block() {
150 assert_js!(
151 "pub fn negate(x) {
152 !{
153 123
154 x
155 }
156}"
157 );
158}
159
160#[test]
161fn binop_panic_right() {
162 assert_js!(
163 "pub fn negate(x) {
164 x && panic
165}"
166 );
167}
168
169#[test]
170fn binop_panic_left() {
171 assert_js!(
172 "pub fn negate(x) {
173 panic && x
174}"
175 );
176}
177
178#[test]
179fn binop_todo_right() {
180 assert_js!(
181 "pub fn negate(x) {
182 x && todo
183}"
184 );
185}
186
187#[test]
188fn binop_todo_left() {
189 assert_js!(
190 "pub fn negate(x) {
191 todo && x
192}"
193 );
194}
195
196#[test]
197fn negate_panic() {
198 assert_js!(
199 "pub fn negate(x) {
200 !panic
201}"
202 );
203}
204
205#[test]
206fn negate_todo() {
207 assert_js!(
208 "pub fn negate(x) {
209 !todo
210}"
211 );
212}