includes :file :assert :subprocess

overall_results = [tests: 0 assertions: 0 failures: 0 skips: 0]

object.add_results = { r |
  r.each { k, v |
    overall_results[k] = overall_results[k] + v
  }
}

[:array :ast :base64 :core :enumerable :examples :file :function :hash :json :misc
:number :object :parser :peg :regex :seq :stdlib :string :var-assigner].shuffle!.each { name |

  #Force recompilation
  true? file.exists?("test/test-#{name}.lua")
    { file.delete "test/test-#{name}.lua" }

  protect { p "Loading #{name} tests..."; import "test/test-#{name}" } rescue: { e | p e }
  p "-" * 50

  #Clean up Lua files
  true? file.exists?("test/test-#{name}.lua")
    { file.delete "test/test-#{name}.lua" }

}

file.delete "test/test.lua"

date = subprocess.run('date "+%b %d, %Y"').strip!
p "Test results: #{overall_results[:tests]} tests, #{overall_results[:assertions]} assertions, #{overall_results[:skips]} tests skipped, #{overall_results[:failures]} failures on #{date}."

true? overall_results[:failures] == 0
  { exit 0 }
  { exit 1 }