anchor.diff:          printfn "%A" e
           false
   
  +let performanceCheck files =
  +    printfn "Running performance tests..."
  +    let contents = files |> Array.map System.IO.File.ReadAllText
  +    let stopwatch = Stopwatch.StartNew()
  +    for str in contents do
  +        doMinify str |> ignore
  +    let time = stopwatch.Elapsed
  +    printfn "%i files minified in %f seconds." files.Length time.TotalSeconds
  +
   [<EntryPoint>]
   let main argv =
       initOpenTK()
       let mutable failures = 0
  -    let inputs = Directory.GetFiles("tests/unit", "*.frag")
  -    for f in inputs do
  +    let unitTests = Directory.GetFiles("tests/unit", "*.frag")
  +    let realTests = Directory.GetFiles("tests/real", "*.frag");
  +    for f in unitTests do
           if not (check f) then
               failures <- failures + 1
  +    performanceCheck (Seq.concat [realTests; unitTests] |> Seq.toArray)
       if failures = 0 then
           printfn "All good."
  -        // System.Console.ReadLine() |> ignore
  -        0
       else
           printfn "%d failures." failures
  -        // System.Console.ReadLine() |> ignore
  -        1
  +    
  +    System.Console.ReadLine() |> ignore
  +    if failures = 0 then 0 else 1
  
positive.code: 
  let check (file: string) =
      try
          let content =
              use file = new StreamReader(file)
              file.ReadToEnd()
          if not (testCompile content) then
              printfn "Invalid input file '%s'" file
              false
  
negative.code: ﻿open OpenTK.Graphics.OpenGL
  open System
  open System.Diagnostics
  open System.IO
  
  let initOpenTK () =
  