packages feed

adp-multi-0.1.0: benchmarks/Benchmarks.hs

import Criterion.Main

import ADP.Multi.Rewriting.ConstraintSolver as CS
import ADP.Multi.Rewriting.Explicit as EX
import ADP.Tests.RGExample as RG
import ADP.Tests.RGExampleDim2 as RG2
import ADP.Tests.Nussinov as Nuss
import ADP.Tests.NussinovExample as Nuss2

main :: IO ()
main = defaultMain 
          [
              bgroup "compare explicit vs constraint solver range construction" [
                  bgroup "RG dim1+2" [
                         bench "explicit" $ nf (simple EX.determineYieldSize1 EX.constructRanges1 EX.determineYieldSize2) EX.constructRanges2,
                         bench "constraint solver" $ nf (simple CS.determineYieldSize1 CS.constructRanges1 CS.determineYieldSize2) CS.constructRanges2
                    ],
                  bgroup "RG dim2" [
                         bench "explicit" $ nf (simple2 EX.determineYieldSize1 EX.constructRanges1 EX.determineYieldSize2) EX.constructRanges2,
                         bench "constraint solver" $ nf (simple2 CS.determineYieldSize1 CS.constructRanges1 CS.determineYieldSize2) CS.constructRanges2
                    ]
              ],
              bgroup "compare different nussinovs" [
                  bench "nussinov78 (adp)" $ nf (Nuss.nussinov78 Nuss.pairmax) longInp,
                  bench "nussinov78' (adp)" $ nf (Nuss.nussinov78' Nuss.pairmax) longInp,
                  bench "nussinov78 (adp-multi)" $ nf (Nuss2.nussinov78 EX.determineYieldSize1 EX.constructRanges1 Nuss2.pairmax) longInp
              ],
              bgroup "compare different nussinovs (doubled size)" [
                  bench "nussinov78 (adp)" $ nf (Nuss.nussinov78 Nuss.pairmax) veryLongInp,
                  bench "nussinov78' (adp)" $ nf (Nuss.nussinov78' Nuss.pairmax) veryLongInp,
                  bench "nussinov78 (adp-multi)" $ nf (Nuss2.nussinov78 EX.determineYieldSize1 EX.constructRanges1 Nuss2.pairmax) veryLongInp
              ]
          ]

longInp = "ggcguaggcgccgugcuuuugcuccccgcgcgcuguuuuucucgcugacuuucagcgggcggaaaagccucggccugccgccuuccaccguucauucuagagcaaacaaaaaaugucagcu"
veryLongInp = longInp ++ longInp       

simple yieldAlg1 rangeAlg1 yieldAlg2 rangeAlg2 = 
       RG.rgknot yieldAlg1 rangeAlg1 yieldAlg2 rangeAlg2 RG.maxBasepairs "agcgu"
       
simple2 yieldAlg1 rangeAlg1 yieldAlg2 rangeAlg2 = 
       RG2.rgknot yieldAlg1 rangeAlg1 yieldAlg2 rangeAlg2 RG2.maxBasepairs "agcgu"