anchor.diff:  
           let root = @"D:\a\data\marspec\MARSPEC_10m\ascii\"
           let paths = Directory.GetFiles(root, "*.asc")
  -        testSimpleRandom "test simple AllMarspec10m" paths 100 1000 |> ignore
  -        //testSparseRandom "test sparse AllMarspec10m" paths 10000 10 |> ignore
  -        
  +        let prm = [(10000,10);(1000,100);(100,1000)]
  +        for (outer, inner) in prm do
  +            testSimpleRandom "Simple AllMarspec10m" paths outer inner |> ignore
  +            testMemoryRandom "Memory mapped AllMarspec10m" paths outer inner |> ignore
  +            testSparseRandom "Sparse AllMarspec10m" paths outer inner |> ignore
  +            testBatchRandom "Batch AllMarspec10m" paths outer inner |> ignore
           // Simple
  -        // 39s 10000 * 10
  -        // 22s 1000 * 100
  -        // 17s 100 * 1000
  -        // 16s 100 * 1000 with BinaryReader caching
  +        // 32s 10000 * 10
  +        // 20s 1000 * 100
  +        // 14s 100 * 1000
  +        // 13s 100 * 1000 with BinaryReader caching
           // MemoryMappedRead
  -        // 86s 10000 * 10
  -        // 28s 1000 * 100
  -        // 10s 100*1000
  +        // 109s 10000 * 10
  +        // 23s 1000 * 100
  +        // 6s 100*1000
           // 9s 100*1000 with MemoryMappedFile caching
           // Sparse (all with bitmap caching up front)
           // 32s 10000 * 10
  -        // 18s 1000 * 100
  +        // 17s 1000 * 100
  +        // 14s 100 * 1000
  +        // Batch
  +        // 34s 10000 * 10
  +        // 20s 1000 * 100
           // 15s 100 * 1000
   
       let testGebco() =
  
positive.code:         printfn "test sparse index %d ms" sw.ElapsedMilliseconds
          result
  
      let testSimpleRandom = testRandomQuery AsciiProvider.convertToSimple Reader.simpleQuery
      let testSparseRandom = testRandomQuery AsciiProvider.convertToSparse Reader.sparseQuery 
      let testSmallMarspec() =
          let outerlen = 10
          let innerlen = 10000
          let result1 = testSimpleRandom "test simple SmallMarspec" [|@"D:\a\data\marspec\MARSPEC_10m\ascii\bathy_10m.asc"|] outerlen innerlen
          let result2 = testSparseRandom "test sparse SmallMarspec" [|@"D:\a\data\marspec\MARSPEC_10m\ascii\bathy_10m.asc"|] outerlen innerlen
          printfn "simple result: %A" result1
          printfn "sparse result: %A" result2
  
      let testAllBioOracle() =
          ignore // TODO
  
negative.code:         converter fileName sbg
  
      let testRandomQuery converter query name paths outerlen innerlen =
          printfn "START %s %d %d" name outerlen innerlen
          let sbgPaths = paths |> Array.map (testPrepareLoad converter)
          
          let r = new Random(1)
  