#!/usr/bin/env dbqn
eval ← (1≤≠)◶{𝕩:•BQN}‿{⍎⊑𝕩}•args # use 1st argument as the interpreter
err←"err"
{ 𝕊path:
  lns ← ('#'⊸∊¨∧'#'≠(⊑1↑⊢)¨)⊸/ •FLines path
  
  msgs←∾{
    p←⊑𝕩⊐'#'
    src ← p↑𝕩
    src ↩ {𝕩/˜¬∧`⌾⌽' '=𝕩} src
    got ← Eval⎊"err" src
    exp ← ⍎(p+1)↓𝕩
    got ≡◶{⟨"`"∾src∾"`: got "∾𝕨∾", expected "∾𝕩⟩}‿⟨⟩○(1⊸⍕) exp
  }¨ lns
  (0=≠)◶{𝕩:•Out path∾": "∾(⍕lns-○≠msgs)∾" / "∾⍕≠lns}‿{𝕩:•Out path∾": Passed all "∾(⍕≠lns)∾" tests"} msgs
  {•Out"   "∾𝕩}¨msgs
}¨ •path⊸∾¨ ⟨"assignment","headers","shape","eq","export","namespaces","tk"⟩