Skip to main content

sim_lib_lang_javascript/
matrix_row.rs

1use sim_kernel::Symbol;
2use sim_lib_standard_core::{
3    LanguageRow, LanguageRowBuilder, SourceConformanceCase, SourceConformanceCaseKind,
4    SourceExpectation,
5};
6/// Build the JavaScript core conformance row.
7pub fn javascript_core_matrix_row() -> LanguageRow {
8    LanguageRowBuilder::new(Symbol::new("javascript"), crate::javascript_core_profile())
9        .with_cases(javascript_core_source_cases())
10        .build()
11}
12/// Checked source cases entering only through `codec/javascript`.
13pub fn javascript_core_source_cases() -> Vec<SourceConformanceCase> {
14    [
15        (
16            "primitive-coercion-equality",
17            "let answer = '40' == 40; answer;",
18            "true",
19        ),
20        (
21            "declaration-loop",
22            "let answer = 0; while (answer < 42) { answer += 1; } answer;",
23            "42",
24        ),
25        (
26            "destructuring-abrupt",
27            "let [left, right] = [40, 2]; return left + right;",
28            "return 42",
29        ),
30        ("installed-bigint", "let answer = 40n + 2n; answer;", "42n"),
31    ]
32    .into_iter()
33    .map(|(name, source, expected)| SourceConformanceCase {
34        symbol: Symbol::qualified("test/javascript-core", name),
35        organ: Symbol::qualified("codec", "javascript"),
36        source_name: format!("{name}.js"),
37        source: source.into(),
38        kind: SourceConformanceCaseKind::Observed,
39        expectation: SourceExpectation::LowersTo(expected.into()),
40        affects_badge: None,
41    })
42    .collect()
43}
44#[cfg(test)]
45mod tests {
46    #[test]
47    fn row_is_codec_source_backed() {
48        let row = super::javascript_core_matrix_row();
49        assert_eq!(row.cases.len(), 4);
50        assert!(
51            row.cases
52                .iter()
53                .all(|c| c.organ == sim_kernel::Symbol::qualified("codec", "javascript"))
54        );
55    }
56}