packages feed

adp-multi-0.2.2: tests/ADP/Tests/Main.hs

import System.IO (hSetBuffering, stdout, BufferMode (LineBuffering))
import Data.Char (toLower)
import Control.Monad (forM_)
import qualified ADP.Tests.RGExample as RG
import qualified ADP.Tests.NestedExample as N
import qualified ADP.Tests.CopyExample as C
import qualified ADP.Tests.OneStructureExample as One
import qualified ADP.Tests.ZeroStructureTwoBackbonesExample as ZeroTT
import qualified ADP.Tests.AlignmentExample as Alignment
import qualified ADP.Tests.TreeAlignExample as TreeAlign
import qualified ADP.Tests.TermExample as Term

-- this file shows the usage of all the test grammars and can be
-- used for quick tests

main::IO()
main = do
        hSetBuffering stdout LineBuffering
        
        --forM_ result print
        --forM_ result21 print
        --forM_ result3 print
        --forM_ result4 print
        --forM_ result53 print
        --forM_ result6 putStrLn
        --forM_ result6t3 print
        --forM_ result7 print
        --forM_ result8 print
        --forM_ result9 print
        --forM_ result10 print
        --forM_ resultTerm putStrLn
        forM_ resultTreeAlign print
        
        where
            -- http://www.ekevanbatenburg.nl/PKBASE/PKB00279.HTML
            -- struc = ".(((((..[[[))))).]]]."
            --inp = map toLower "CAAUUUUCUGAAAAUUUUCAC"
            
            -- http://www.ekevanbatenburg.nl/PKBASE/PKB00289.HTML
            -- struc = "..((((..[[[[)))).....]]]]..."
            -- inp = map toLower "ACCGUCGUUCCCGACGUAAAAGGGAUGU"
            
            -- https://github.com/neothemachine/rna/wiki/Example
            inp = "agcgu"

            --inp = map toLower "ACGAUUCAACGU"
            
            rg = RG.rgknot
            
            result = rg RG.enum inp
            result2 = rg RG.maxBasepairs inp
            result21 = rg (RG.prettyprint RG.*** RG.maxBasepairs) inp
            result3 = rg RG.maxKnots inp
            result4 = rg RG.prettyprint inp
            
            result5 = rg (RG.enum RG.*** RG.prettyprint) inp
            result51 = rg (RG.prettyprint RG.*** RG.pstree) inp
            result52 = rg (RG.prettyprint RG.*** RG.pstreeYield) inp
            result53 = rg (RG.prettyprint RG.*** RG.pstreeEval) inp
            
            nested = N.nested
            result6 = nested (N.pstree) inp
            
            result6t = nested (N.maxBasepairs N.*** N.prettyprint) inp
            result6t2 = nested (N.term N.*** N.maxBasepairs) inp
            result6t3 = nested (N.termPlain N.*** N.maxBasepairs) inp
            
            copy = C.copyGr
            result7 = copy (C.countABs) "abaaabaa"
            
            oneStructure = One.oneStructure
            result8 = oneStructure (One.prettyprint) inp
            
            zeroStructureTT = ZeroTT.zeroStructureTwoBackbones
            result9 = zeroStructureTT (ZeroTT.enum) (inp,inp)
            
            alignment = Alignment.alignmentGr
            result10 = alignment (Alignment.unit Alignment.*** Alignment.count) ("darling","airline")
            
            term = Term.term
            termAlg = Term.qtree (\sym -> 
                if sym `elem` ["a","g","c","u",".","(",")","[","]"] then "\\ts{" ++ sym ++ "}" 
                else if take 2 sym == "f_" || take 2 sym == "g_" then "$\\op{" ++ take 1 sym ++ "}_" ++ drop 2 sym ++ "$"
                else "$" ++ sym ++ "$")
            resultTerm = term termAlg "Z:r_1(.,Z:r_1(.,Z:r_1(.,Z:r_1(.,Z:r_1(.,Z:r_1(.,\\epsilon))))))"
            
            tree1 = "f(f(),g(f()))"
            tree2 = "f(f(),g())"
            ta = TreeAlign.treeAlign (TreeAlign.treeSimilarity TreeAlign.*** TreeAlign.term)
            resultTreeAlign = ta (tree1,tree2)