extern crate rstm;
use rstm::{MovingHead, Program, program};
fn main() -> rstm::Result<()> {
tracing_subscriber::fmt()
.with_max_level(tracing::Level::TRACE)
.with_target(false)
.with_timer(tracing_subscriber::fmt::time::uptime())
.init();
let input = [0, 0, 0, 0, 1, 0, 1, 1, 0, 1];
let initial_state: isize = 0;
let program: Program<isize, usize> = program! {
#[default_state(initial_state)]
rules: {
(0, 0) -> Right(1, 0),
(0, 1) -> Left(-1, 1),
(1, 0) -> Right(1, 1),
(1, 1) -> Right(0, 0),
(-1, 0) -> Left(<isize>::MAX, 0),
(-1, 1) -> Left(-1, 0),
};
};
program.export_json("rstm/examples/example.program.json")?;
let mut tm = MovingHead::tmh(program);
tm.extend_tape(input);
tm.run()
}