checksmix 0.3.6

A simplified MMIX simulator - Donald Knuth's hypothetical computer for teaching and learning assembly language programming.
Documentation
name: CI/CD Pipeline
on:
  push:
    branches: [main]
  pull_request:
    branches: [main]
env:
  CARGO_TERM_COLOR: always
jobs:
  rust-checks:
    name: Rust Linting and Testing
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v4
      - name: Set up Rust
        uses: actions-rs/toolchain@v1
        with:
          toolchain: stable
          override: true
          components: rustfmt, clippy
      - name: Cache Rust dependencies
        uses: actions/cache@v4
        with:
          path: |
            ~/.cargo/bin/
            ~/.cargo/registry/index/
            ~/.cargo/registry/cache/
            ~/.cargo/git/db/
            target/
          key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
          restore-keys: |
            ${{ runner.os }}-cargo-
      - name: Check formatting
        run: cargo fmt --all -- --check
      - name: Run clippy
        run: cargo clippy --all-targets --all-features -- -D warnings
      - name: Build project
        run: cargo build --verbose
      - name: Run Rust tests
        run: cargo test --verbose
  wasm-check:
    name: Wasm Library Check
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v4
      - name: Set up Rust
        uses: actions-rs/toolchain@v1
        with:
          toolchain: stable
          override: true
          target: wasm32-unknown-unknown
      - name: Cache Rust dependencies
        uses: actions/cache@v4
        with:
          path: |
            ~/.cargo/bin/
            ~/.cargo/registry/index/
            ~/.cargo/registry/cache/
            ~/.cargo/git/db/
            target/
          key: ${{ runner.os }}-cargo-wasm-${{ hashFiles('**/Cargo.lock') }}
          restore-keys: |
            ${{ runner.os }}-cargo-
      - name: Check library for wasm32-unknown-unknown
        run: cargo check --lib --no-default-features --target wasm32-unknown-unknown
  man-check:
    name: Man Page Lint
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v4
      - name: Install mandoc and groff
        run: sudo apt-get update && sudo apt-get install -y mandoc groff
      - name: Lint man pages
        run: |
          shopt -s nullglob
          pages=(man/*.1)
          if [ ${#pages[@]} -eq 0 ]; then
            echo "no man pages found -- the glob is wrong or man/ was moved"
            exit 1
          fi
          status=0
          for page in "${pages[@]}"; do
            echo "== $page"
            # mandoc lints macro use; -W warning makes every diagnostic exit
            # nonzero so a malformed page fails the job instead of printing
            # into a green log.
            mandoc -T lint -W warning "$page" || status=1
            # groff renders as man(1) will, catching what mandoc accepts but
            # the GNU macro package rejects. -z discards output, -ww warns.
            groff -man -Tascii -ww -z "$page" || status=1
          done
          exit $status