anchor.diff:  
   let indexRef = ref 0
   let templatesPathRef = ref TemplatesGenerator.path
  +
  +let countMatchesDetailed (result:array<int16>) maxTemplateLength bound length (templateLengths:array<byte>) (prefix:array<int16>) (matchesArray:array<uint64>) =
  +    let mutable matches = 0
  +    let clearBound = min (bound - 1) (length - (int) maxTemplateLength)
  +
  +    for i in 0..clearBound do
  +        let mutable matchIndex = result.[i]
  +        if matchIndex >= 0s then
  +            matchesArray.[(int) matchIndex] <- matchesArray.[(int) matchIndex] + 1UL
  +            matches <- matches + 1
  +
  +    for i in (clearBound + 1)..(bound - 1) do
  +        let mutable matchIndex = result.[i]
  +        while matchIndex >= 0s && i + (int) templateLengths.[(int) matchIndex] > length do
  +            matchIndex <- prefix.[(int) matchIndex]
  +            
  +        if matchIndex >= 0s then
  +            matchesArray.[(int) matchIndex] <- matchesArray.[(int) matchIndex] + 1UL
  +            matches <- matches + 1
  +    matches
   
   let launch k localWorkSize index templatesPath =
       let templatesReader = File.OpenRead(templatesPath)
  
positive.code: //        AhoCorasickGpu.close
      testAlgorithmAsync gpuAhoCorasickOptimizedInitializer gpuAhoCorasickOptimizedUploader gpuAhoCorasickOptimizedDownloader AhoCorasickOptimized.label gpuAhoCorasickOptimized
          AhoCorasickOptimized.close
      testAlgorithm cpuAhoCorasickInitializer cpuAhoCorasickGetter AhoCorasickCpu.label cpuMatchesAhoCorasick
  
      Substrings.verifyResults !cpuMatches !cpuMatchesHashed NaiveHashingSearch.label
      Substrings.verifyResults !cpuMatches !gpuMatches NaiveSearchGpu.label
  
negative.code:         let mutable read = 0
          let mutable highBound = 0
  
          let matches = Array.zeroCreate 256
  
          let mutable current = 0L
  
          let handle = Raw.CreateFile(index)
  