anchor.diff:          | Exception e -> "Exception: " + e.ToString()
   
       type TestResults = (string * TestResult) list
  -
  -    let testResultsToString (results: TestResults) =
  -        results 
  -        |> Seq.map (fun (n,t) -> sprintf "%s: %s" n (testResultToString t))
  -        |> String.concat "\n"
   
       type TestResultCounts = {
           Passed: int
  
positive.code:             then ok
              else failf "Expected %A but was %A" expected actual
  
      let exec =
          let rec loop (parentName: string) (partialResults: TestResults) =
              function
              | TestLabel (name, test) -> loop (parentName + "/" + name) partialResults test
              | TestCase test -> 
                  try
                      match test() with
                      | Choice1Of2() -> (parentName, Passed)::partialResults
                      | Choice2Of2 error -> (parentName, Failed error)::partialResults
                  with e -> (parentName, Exception e)::partialResults
              | TestList tests -> List.collect (loop parentName partialResults) tests
  
          loop "" []
  
negative.code:     [<Extension>]
      [<CompiledName("Run")>]
      let run tests = 
          let printResult (n,t) = printfn "%s: %s" n (testResultToString t)
          let results = exec printResult printResult printResult tests
          let summary = sumTestResults results
          printfn "%d tests run: %d passed, %d failed, %d errored"
              (summary.Errored + summary.Failed + summary.Passed)
              summary.Passed
  