in smt2proxy/src/lib.rs [84:135]
fn from(config: CommandProcessorConfig) -> Self {
use rand::SeedableRng;
let mut log = config
.smt2proxy_log_path
.as_ref()
.map(|path| std::fs::File::create(path).expect("Failed to open log file"));
if let Some(f) = &mut log {
writeln!(f, "; smt2proxy config: {:?}", config).unwrap();
}
let delay = config.smt2proxy_shuffle.is_some() || config.smt2proxy_delay;
let shuffle = config
.smt2proxy_shuffle
.map(rand::rngs::StdRng::seed_from_u64);
let mut options = config.smt2proxy_options;
if let Some(seed) = config.smt2proxy_seed {
options.insert(
Keyword("random-seed".into()),
AttributeValue::Constant(Constant::Numeral(Numeral::from(seed))),
);
options.insert(
Keyword("smt.random_seed".into()),
AttributeValue::Constant(Constant::Numeral(Numeral::from(seed))),
);
}
let rewriter = if config.smt2proxy_normalize_symbols {
let max_randomized_symbols = config.smt2proxy_max_randomized_symbols;
let randomization_space = smt2parser::visitors::SymbolKind::iter()
.map(|k| (k, max_randomized_symbols))
.collect();
let randomization_seed = config
.smt2proxy_symbol_randomization_seed
.unwrap_or_else(rand::random);
let config = smt2parser::renaming::SymbolNormalizerConfig {
randomization_space,
randomization_seed,
};
Some(Rewriter::new(SyntaxBuilder, config))
} else {
None
};
Self {
logger: log.map(|f| Arc::new(Mutex::new(f))),
delay,
shuffle,
options,
has_sent_initial_commands: false,
clauses: Vec::new(),
rewriter,
}
}