anchor.diff:            do! innerPrinter.summary c s
             tcLog "testSuiteFinished" [
               "name", "ExpectoTestSuite" ] } }
  -    static member fromInterface (i : ITestPrinter) =
  -      { beforeRun   = i.BeforeRun >> Async.AwaitTask
  -        beforeEach  = i.BeforeEach >> Async.AwaitTask
  -        passed      = fun n d -> i.Passed(n, d) |> Async.AwaitTask
  -        info        = i.Info >> Async.AwaitTask
  -        ignored     = fun n m -> i.Ignored(n, m) |> Async.AwaitTask
  -        failed      = fun n m d -> i.Failed(n, m, d) |> Async.AwaitTask
  -        exn         = fun n e d -> i.Exn(n, e, d) |> Async.AwaitTask
  -        summary     = fun c s -> i.Summary(c, s) |> Async.AwaitTask
  -      }
       static member mergePrinters (first:TestPrinters, second:TestPrinters) =
         let runTwoAsyncs a b = async {
           do! a
  
positive.code: open System.Diagnostics
  open System.Threading
  open System.Threading.Tasks
  
  // TODO: move to internal
  type SourceLocation =
  
negative.code:     {absolute=1e-12; relative=1e-9}
  
  namespace Expecto.CSharp
  open System
  open System.Threading.Tasks
  open System.Runtime.CompilerServices
  open Expecto
  open Expecto.Impl
  
  // C# is weak and can't really handle Async or partial application
  type ITestPrinter =
    abstract member BeforeRun   : Test -> Task
    abstract member BeforeEach  : string -> Task
    abstract member Info        : string -> Task
    abstract member Passed      : string * TimeSpan -> Task
    abstract member Ignored     : string * string -> Task
    abstract member Failed      : string * string * TimeSpan -> Task
    abstract member Exn         : string * exn * TimeSpan -> Task
    abstract member Summary     : ExpectoConfig * TestRunSummary -> Task
  
  
  [<AutoOpen; Extension>]
  module Runner =
    open Expecto
    open System.Collections.Generic
  
    let private printerFromInterface (i : ITestPrinter) =
        { beforeRun   = i.BeforeRun >> Async.AwaitTask
          beforeEach  = i.BeforeEach >> Async.AwaitTask
          passed      = fun n d -> i.Passed(n, d) |> Async.AwaitTask
          info        = i.Info >> Async.AwaitTask
          ignored     = fun n m -> i.Ignored(n, m) |> Async.AwaitTask
          failed      = fun n m d -> i.Failed(n, m, d) |> Async.AwaitTask
          exn         = fun n e d -> i.Exn(n, e, d) |> Async.AwaitTask
          summary     = fun c s -> i.Summary(c, s) |> Async.AwaitTask
        }
  
    type Async with
      static member AwaitTask(t : Task) =
  