sim_lib_lang_matrix/
lib.rs1#![forbid(unsafe_code)]
2#![deny(missing_docs)]
3use sim_lib_lang_cl::cl_lite_matrix_row;
6use sim_lib_lang_clojure::clojure_core_matrix_row;
7use sim_lib_lang_islisp::islisp_matrix_row;
8use sim_lib_lang_julia::julia_core_matrix_row;
9use sim_lib_lang_lua::lua_core_matrix_row;
10use sim_lib_lang_prolog::prolog_matrix_row;
11use sim_lib_lang_ruby::ruby_dsl_matrix_row;
12use sim_lib_lang_scheme::r7rs_small_matrix_row;
13use sim_lib_lang_typed_lazy::typed_lazy_matrix_row;
14use sim_lib_standard_core::ConformanceMatrix;
15
16pub fn language_matrix() -> ConformanceMatrix {
18 let mut matrix = ConformanceMatrix::new();
19 matrix.register(r7rs_small_matrix_row());
20 matrix.register(cl_lite_matrix_row());
21 matrix.register(clojure_core_matrix_row());
22 matrix.register(islisp_matrix_row());
23 matrix.register(julia_core_matrix_row());
24 matrix.register(lua_core_matrix_row());
25 matrix.register(ruby_dsl_matrix_row());
26 matrix.register(typed_lazy_matrix_row());
27 matrix.register(prolog_matrix_row());
28 matrix
29}
30
31#[cfg(test)]
32mod tests {
33 use std::collections::BTreeSet;
34
35 use sim_kernel::Symbol;
36
37 use super::*;
38
39 #[test]
40 fn language_matrix_has_exactly_nine_rows() {
41 let matrix = language_matrix();
42
43 assert_eq!(matrix.language_count(), 9);
44 }
45
46 #[test]
47 fn language_matrix_has_no_duplicate_row_names() {
48 let matrix = language_matrix();
49 let names: Vec<_> = matrix
50 .iter_rows()
51 .map(|row| row.language.to_string())
52 .collect();
53 let unique: BTreeSet<_> = names.iter().cloned().collect();
54
55 assert_eq!(unique.len(), names.len());
56 }
57
58 #[test]
59 fn language_matrix_rows_are_populated() {
60 let matrix = language_matrix();
61
62 for language in [
63 "scheme",
64 "common-lisp",
65 "clojure",
66 "islisp",
67 "julia",
68 "lua",
69 "ruby",
70 "typed-lazy",
71 "prolog",
72 ] {
73 let row = matrix
74 .row(&Symbol::new(language))
75 .unwrap_or_else(|| panic!("{language} row must be registered"));
76 assert!(!row.is_empty(), "{language} row must have cases");
77 }
78 }
79}