packages feed

myers-diff-0.3.0.0: bench-weigh/Main.hs

{-# LANGUAGE CPP #-}

module Main (main) where

import qualified Data.Diff.Myers as VM
import qualified Data.List as L
import Data.String.Interpolate
import Data.Text as T
import qualified Data.Vector.Unboxed as VU
import TestLib.Benchmarking
import TestLib.Instances ()
import Weigh

#ifdef DIFF
import qualified Data.Diff.Diff as DD
#endif


testFunc :: Int -> [(String, String, Text, Text, VU.Vector Char, VU.Vector Char)] -> Weigh ()
testFunc inputSize samples = wgroup [i|#{inputSize} characters|] $ do
  func' "myers-diff-vector" (L.map (\(_, _, _, _, initialVector, finalVector) -> (VM.diffVectors initialVector finalVector))) samples
  func' "myers-diff-string" (L.map (\(initialString, finalString, _, _, _, _) -> (VM.diffStrings initialString finalString))) samples
  func' "myers-diff-text" (L.map (\(_, _, initialText, finalText, _, _) -> (VM.diffTexts initialText finalText))) samples
#ifdef DIFF
  func' "Diff" (L.map (\(initialString, finalString, _, _, _, _) -> (DD.diff initialString finalString))) samples
#endif

main :: IO ()
main = do
  insertSamples10 <- getPairSingleInsert 100 10
  insertSamples100 <- getPairSingleInsert 100 100
  insertSamples1000 <- getPairSingleInsert 100 1000
  insertSamples10000 <- getPairSingleInsert 100 10000
  insertSamples100000 <- getPairSingleInsert 100 100000

  deleteSamples10 <- getPairSingleDelete 100 10
  deleteSamples100 <- getPairSingleDelete 100 100
  deleteSamples1000 <- getPairSingleDelete 100 1000
  deleteSamples10000 <- getPairSingleDelete 100 10000
  deleteSamples100000 <- getPairSingleDelete 100 100000

  mainWith $ do
    setFormat Markdown

    wgroup [i|Single insert (100 samples each)|] $ do
      testFunc 10 insertSamples10
      testFunc 100 insertSamples100
      testFunc 1000 insertSamples1000
      testFunc 10000 insertSamples10000
      testFunc 100000 insertSamples100000

    wgroup [i|Single delete (100 samples each)|] $ do
      testFunc 10 deleteSamples10
      testFunc 100 deleteSamples100
      testFunc 1000 deleteSamples1000
      testFunc 10000 deleteSamples10000
      testFunc 100000 deleteSamples100000