sim_lib_lang_genconf/
lib.rs1#![forbid(unsafe_code)]
2#![deny(missing_docs)]
3pub mod anchor;
10pub mod coverage;
11pub mod property;
12pub mod publish;
13pub mod registry;
14pub mod seed;
15pub mod space;
16
17pub use anchor::{
18 CoverageVerdict, LandmarkCorpus, common_lisp_lite_landmark_corpus, r7rs_small_landmark_corpus,
19};
20pub use coverage::{GeneratedCoverageReport, run_generated_row};
21pub use property::{check_round_trip, generated_expr_cases};
22pub use publish::{
23 coverage_card_fields, generated_coverage_profile_symbol, publish_coverage_claims,
24};
25pub use registry::{GenerativeRow, generative_registry, run_all_generated};
26pub use seed::r7rs_seed_corpus;
27pub use space::ExprSpace;
28
29#[cfg(test)]
30mod landmark_tests {
31 use sim_kernel::Expr;
32 use sim_lib_lang_scheme::r7rs_small_expr_cases;
33
34 use super::ExprSpace;
35
36 #[test]
39 fn generator_reproduces_curated_scheme_landmarks() {
40 let space = ExprSpace::r7rs_core_space(3);
41 let generated = space.enumerate(256);
42 let landmarks = curated_landmark_exprs();
43
44 assert!(!r7rs_small_expr_cases().is_empty());
45 assert!(
46 !landmarks.is_empty(),
47 "Scheme row must expose at least one concrete Expr landmark",
48 );
49 for landmark in landmarks {
50 assert!(
51 generated
52 .iter()
53 .any(|generated| generated.canonical_eq(&landmark)),
54 "generator failed to reproduce curated landmark: {landmark:?}",
55 );
56 }
57 }
58
59 fn curated_landmark_exprs() -> Vec<Expr> {
60 r7rs_small_expr_cases()
61 .into_iter()
62 .filter_map(|case| {
63 case.expected_display
64 .as_deref()
65 .and_then(expr_from_expected_display)
66 })
67 .collect()
68 }
69
70 fn expr_from_expected_display(display: &str) -> Option<Expr> {
71 match display {
72 "Expr::Bool(true)" => Some(Expr::Bool(true)),
73 "Expr::Bool(false)" => Some(Expr::Bool(false)),
74 _ => None,
75 }
76 }
77}