Fork of daniellemaywood.uk/gleam — Wasm codegen work
Something went wrong. Try again.
4.8 kB · 372 lines
Rust
at wasm
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373// SPDX-License-Identifier: Apache-2.0// SPDX-FileCopyrightText: 2021 The Gleam contributors
use crate::{assert_js, assert_ts_def};
#[test]fn tuple_matching() { assert_js!( r#"pub fn go(x) { let assert #(1, 2) = x}"#, )}
#[test]fn assert() { assert_js!(r#"pub fn go(x) { let assert 1 = x }"#,);}
#[test]fn assert1() { assert_js!(r#"pub fn go(x) { let assert #(1, 2) = x }"#,);}
#[test]fn nested_binding() { assert_js!( r#"pub fn go(x) { let assert #(a, #(b, c, 2) as t, _, 1) = x}"#, )}
#[test]fn variable_renaming() { assert_js!( r#"
pub fn go(x, wibble) { let a = 1 wibble(a) let a = 2 wibble(a) let assert #(a, 3) = x let b = a wibble(b) let c = { let a = a #(a, b) } wibble(a) // make sure arguments are counted in initial state let x = c x}"#, )}
#[test]fn constant_assignments() { assert_js!( r#"const a = True
pub fn go() { a let a = 10 a + 20}
fn second() { let a = 10 a + 20}"#, );}
#[test]fn returning_literal_subject() { assert_js!(r#"pub fn go(x) { let assert 1 = x + 1 }"#,);}
#[test]fn rebound_argument() { assert_js!( r#"pub fn main(x) { let x = False x}"#, );}
#[test]fn rebound_function() { assert_js!( r#"pub fn x() { Nil}
pub fn main() { let x = False x}"#, );}
#[test]fn rebound_function_and_arg() { assert_js!( r#"pub fn x() { Nil}
pub fn main(x) { let x = False x}"#, );}
#[test]fn variable_used_in_pattern_and_assignment() { assert_js!( r#"pub fn main(x) { let #(x) = #(x) x}"#, );}
// https://github.com/gleam-lang/gleam/issues/1253#[test]fn correct_variable_renaming_in_assigned_functions() { assert_js!( r#"pub fn debug(x) { let x = x fn(x) { x + 1 }}"#, );}
#[test]fn module_const_var() { assert_js!( r#"pub const int = 42pub const int_alias = intpub fn use_int_alias() { int_alias }
pub const compound: #(Int, Int) = #(int, int_alias)pub fn use_compound() { compound.0 + compound.1 }"# );}
#[test]fn module_const_var1() { assert_ts_def!( r#"pub const int = 42pub const int_alias = intpub const compound: #(Int, Int) = #(int, int_alias)"# );}
// https://github.com/gleam-lang/gleam/issues/2443#[test]fn let_assert_string_prefix() { assert_js!( r#"pub fn main() { let assert "Game " <> id = "Game 1"}"# );}
// https://github.com/gleam-lang/gleam/issues/3894#[test]fn let_assert_nested_string_prefix() { assert_js!( r#"type Wibble { Wibble(wibble: String)}
pub fn main() { let assert Wibble(wibble: "w" as prefix <> rest) = Wibble("wibble") prefix <> rest}"# );}
// https://github.com/gleam-lang/gleam/issues/2931#[test]fn keyword_assignment() { assert_js!( r#"pub fn main() { let class = 10 let debugger = 50}"# );}
// https://github.com/gleam-lang/gleam/issues/3004#[test]fn escaped_variables_in_constants() { assert_js!( r#"pub const class = 5pub const something = class"# );}
#[test]fn message() { assert_js!( r#"pub fn unwrap_or_panic(value) { let assert Ok(inner) = value as "Oops, there was an error" inner}"# );}
#[test]fn variable_message() { assert_js!( r#"pub fn expect(value, message) { let assert Ok(inner) = value as message inner}"# );}
// https://github.com/gleam-lang/gleam/issues/4471#[test]fn case_message() { assert_js!( r#"pub fn expect(value, message) { let assert Ok(inner) = value as case message { Ok(message) -> message Error(_) -> "No message provided" } inner}"# );}
#[test]fn assert_that_always_succeeds() { assert_js!( r#"type Wibble { Wibble(Int)}
pub fn go() { let assert Wibble(n) = Wibble(1) n}"#, );}
#[test]fn assert_that_always_fails() { assert_js!( r#"type Wibble { Wibble(Int) Wobble(Int)}
pub fn go() { let assert Wobble(n) = Wibble(1) n}"#, );}
#[test]fn catch_all_assert() { assert_js!( r#"type Wibble { Wibble(Int) Wobble(Int)}
pub fn go() { let assert _ = Wibble(1) 1}"#, );}
#[test]fn assert_with_multiple_variants() { assert_js!( r#"type Wibble { Wibble(Int) Wobble(Int) Woo(Int)}
pub fn go() { let assert Wobble(n) = todo n}"#, );}
#[test]fn use_discard_assignment() { assert_js!( r#"type Wibble { Wibble(Int) Wobble(Int) Woo(Int)}
fn fun(f) { f(Wibble(1)) }
pub fn go() { use _ <- fun 1}"#, );}
#[test]fn use_matching_assignment() { assert_js!( r#"fn fun(f) { f(#(2, 4)) }
pub fn go() { use #(_, n) <- fun n}"#, );}