#[macro_use]
extern crate strict_encoding;
use armor::AsciiArmor;
use strict_encoding::STRICT_TYPES_LIB;
use strict_types::stl::std_stl;
use strict_types::typesys::SystemBuilder;
use strict_types::{LibBuilder, SymbolicSys, TypeLib};
fn lib() -> TypeLib {
let std = std_stl();
let builder = LibBuilder::with(libname!(STRICT_TYPES_LIB), [std.to_dependency_types()])
.transpile::<TypeLib>();
builder.compile().unwrap()
}
fn sys() -> SymbolicSys {
let std = std_stl();
let lib = lib();
let builder = SystemBuilder::new().import(lib).unwrap().import(std).unwrap();
builder.finalize().unwrap_or_else(|errors| {
for err in errors {
eprintln!("Error: {err}");
}
panic!()
})
}
#[test]
fn library() {
let lib = lib();
println!("{lib}");
let s = lib.to_ascii_armored_string();
println!("{s}");
let lib2 = TypeLib::from_ascii_armored_str(&s).unwrap();
assert_eq!(lib, lib2);
}
#[test]
fn symbols() {
let sys = sys();
println!("{sys}");
let s = sys.to_ascii_armored_string();
println!("{s}");
let sys2 = SymbolicSys::from_ascii_armored_str(&s).unwrap();
assert_eq!(sys, sys2);
}
#[test]
fn type_tree() {
let sys = sys();
let tt = sys.type_tree("StrictTypes.TypeLib").unwrap();
let _ = tt.to_string();
}