packages feed

GenussFold 0.0.0.1 → 0.0.0.2

raw patch · 4 files changed

+201/−2 lines, 4 filesdep +QuickCheckdep +test-frameworkdep +test-framework-quickcheck2dep ~ADPfusiondep ~basePVP: major bump suggested

API removals or changes: PVP suggests a major version bump

Dependencies added: QuickCheck, test-framework, test-framework-quickcheck2, test-framework-th

Dependency ranges changed: ADPfusion, base

API changes (from Hackage documentation)

- BioInf.GenussFold.PKN: SigPKN :: (s_ac75 -> t_c_ac77 -> s_ac75 -> t_c_ac77 -> s_ac75) -> (() -> s_ac75) -> ((:.) ((:.) Z ()) () -> s_ac75) -> ((:.) ((:.) Z s_ac75) () -> (:.) ((:.) Z t_c_ac77) () -> s_ac75 -> (:.) ((:.) Z ()) s_ac75 -> (:.) ((:.) Z ()) t_c_ac77 -> s_ac75) -> ((:.) ((:.) Z s_ac75) () -> (:.) ((:.) Z t_c_ac77) () -> s_ac75 -> (:.) ((:.) Z ()) s_ac75 -> (:.) ((:.) Z ()) t_c_ac77 -> s_ac75) -> (() -> () -> s_ac75 -> s_ac75 -> s_ac75) -> (s_ac75 -> t_c_ac77 -> s_ac75) -> (Stream m_ac74 s_ac75 -> m_ac74 r_ac76) -> SigPKN m_ac74 s_ac75 r_ac76 t_c_ac77
+ BioInf.GenussFold.PKN: SigPKN :: (s_ac7a -> t_c_ac7c -> s_ac7a -> t_c_ac7c -> s_ac7a) -> (() -> s_ac7a) -> ((:.) ((:.) Z ()) () -> s_ac7a) -> ((:.) ((:.) Z s_ac7a) () -> (:.) ((:.) Z t_c_ac7c) () -> s_ac7a -> (:.) ((:.) Z ()) s_ac7a -> (:.) ((:.) Z ()) t_c_ac7c -> s_ac7a) -> ((:.) ((:.) Z s_ac7a) () -> (:.) ((:.) Z t_c_ac7c) () -> s_ac7a -> (:.) ((:.) Z ()) s_ac7a -> (:.) ((:.) Z ()) t_c_ac7c -> s_ac7a) -> (() -> () -> s_ac7a -> s_ac7a -> s_ac7a) -> (s_ac7a -> t_c_ac7c -> s_ac7a) -> (Stream m_ac79 s_ac7a -> m_ac79 r_ac7b) -> SigPKN m_ac79 s_ac7a r_ac7b t_c_ac7c
- BioInf.GenussFold.PKN: data SigPKN m_ac74 s_ac75 r_ac76 t_c_ac77
+ BioInf.GenussFold.PKN: data SigPKN m_ac79 s_ac7a r_ac7b t_c_ac7c
- BioInf.GenussFold.PKN: gPKN :: (Build b3, MkStream m ((:!:) ((:!:) ((:!:) ((:!:) S (Split "ss_UU_1627436526" Fragment b2)) (Split "ss_VV_1627436527" Fragment b1)) (Split "ss_UU_1627436526" Final b2)) (Split "ss_VV_1627436527" Final b1)) t2, MkStream m (Pair ((:!:) ((:!:) S (TermSymbol (TermSymbol M b3) Deletion)) (TermSymbol (TermSymbol M b) Deletion)) b2) t3, MkStream m (Pair ((:!:) ((:!:) S (TermSymbol (TermSymbol M b3) Deletion)) (TermSymbol (TermSymbol M b) Deletion)) b1) t4, MkStream m ((:!:) ((:!:) ((:!:) (Stack b3) b) b3) b) t2, MkStream m ((:!:) S Epsilon) t2, MkStream m ((:!:) (Stack b3) b) t2, MkStream m S t4, MkStream m S t3, Element ((:!:) ((:!:) ((:!:) ((:!:) S (Split "ss_UU_1627436526" Fragment b2)) (Split "ss_VV_1627436527" Fragment b1)) (Split "ss_UU_1627436526" Final b2)) (Split "ss_VV_1627436527" Final b1)) t2, Element (Pair ((:!:) ((:!:) S (TermSymbol (TermSymbol M b3) Deletion)) (TermSymbol (TermSymbol M b) Deletion)) b2) t3, Element (Pair ((:!:) ((:!:) S (TermSymbol (TermSymbol M b3) Deletion)) (TermSymbol (TermSymbol M b) Deletion)) b1) t4, Element ((:!:) ((:!:) ((:!:) (Stack b3) b) b3) b) t2, Element ((:!:) (Stack b3) b) t2, RuleContext t4, RuleContext t3, RuleContext t2, TermStaticVar (TermSymbol (TermSymbol M Deletion) b3) t4, TermStaticVar (TermSymbol (TermSymbol M Deletion) b3) t3, TermStaticVar (TermSymbol (TermSymbol M Deletion) b) t4, TermStaticVar (TermSymbol (TermSymbol M Deletion) b) t3, TermStaticVar (TermSymbol (TermSymbol M Epsilon) Epsilon) t4, TermStaticVar (TermSymbol (TermSymbol M Epsilon) Epsilon) t3, TerminalStream m (TermSymbol (TermSymbol M Deletion) b3) t4, TerminalStream m (TermSymbol (TermSymbol M Deletion) b3) t3, TerminalStream m (TermSymbol (TermSymbol M Deletion) b) t4, TerminalStream m (TermSymbol (TermSymbol M Deletion) b) t3, TerminalStream m (TermSymbol (TermSymbol M Epsilon) Epsilon) t4, TerminalStream m (TermSymbol (TermSymbol M Epsilon) Epsilon) t3, Apply ((:.) ((:.) (Arg ((:!:) ((:!:) ((:!:) S (TermSymbol (TermSymbol M b3) Deletion)) (TermSymbol (TermSymbol M b) Deletion)) b2)) (TermArg (TermSymbol (TermSymbol M Deletion) b3))) (TermArg (TermSymbol (TermSymbol M Deletion) b)) -> a), Apply ((:.) ((:.) (Arg ((:!:) ((:!:) ((:!:) S (TermSymbol (TermSymbol M b3) Deletion)) (TermSymbol (TermSymbol M b) Deletion)) b1)) (TermArg (TermSymbol (TermSymbol M Deletion) b3))) (TermArg (TermSymbol (TermSymbol M Deletion) b)) -> a), Apply (Arg ((:!:) ((:!:) ((:!:) (Stack b3) b) b3) b) -> a), Apply (Arg ((:!:) ((:!:) ((:!:) ((:!:) S (Split "ss_UU_1627436526" Fragment b2)) (Split "ss_VV_1627436527" Fragment b1)) (Split "ss_UU_1627436526" Final b2)) (Split "ss_VV_1627436527" Final b1)) -> a), Apply (Arg ((:!:) (Stack b3) b) -> a), (~) * (Fun ((:.) ((:.) (Arg ((:!:) ((:!:) ((:!:) S (TermSymbol (TermSymbol M b3) Deletion)) (TermSymbol (TermSymbol M b) Deletion)) b2)) (TermArg (TermSymbol (TermSymbol M Deletion) b3))) (TermArg (TermSymbol (TermSymbol M Deletion) b)) -> a)) ((:.) ((:.) Z a) () -> (:.) ((:.) Z t1) () -> a -> (:.) ((:.) Z ()) a -> (:.) ((:.) Z ()) t1 -> a), (~) * (Fun ((:.) ((:.) (Arg ((:!:) ((:!:) ((:!:) S (TermSymbol (TermSymbol M b3) Deletion)) (TermSymbol (TermSymbol M b) Deletion)) b1)) (TermArg (TermSymbol (TermSymbol M Deletion) b3))) (TermArg (TermSymbol (TermSymbol M Deletion) b)) -> a)) ((:.) ((:.) Z a) () -> (:.) ((:.) Z t1) () -> a -> (:.) ((:.) Z ()) a -> (:.) ((:.) Z ()) t1 -> a), (~) * (Fun (Arg ((:!:) ((:!:) ((:!:) (Stack b3) b) b3) b) -> a)) (a -> t1 -> a -> t1 -> a), (~) * (Fun (Arg ((:!:) ((:!:) ((:!:) ((:!:) S (Split "ss_UU_1627436526" Fragment b2)) (Split "ss_VV_1627436527" Fragment b1)) (Split "ss_UU_1627436526" Final b2)) (Split "ss_VV_1627436527" Final b1)) -> a)) (() -> () -> a -> a -> a), (~) * (Fun (Arg ((:!:) (Stack b3) b) -> a)) (a -> t1 -> a)) => SigPKN m a t t1 -> ((t2 -> t2 -> m t) -> b3) -> ((t3 -> t3 -> m t) -> b2) -> ((t4 -> t4 -> m t) -> b1) -> b -> (:.) ((:.) ((:.) Z b3) b2) b1
+ BioInf.GenussFold.PKN: gPKN :: (Build b3, MkStream m ((:!:) ((:!:) ((:!:) ((:!:) S (Split "ss_UU_1627436531" Fragment b2)) (Split "ss_VV_1627436532" Fragment b1)) (Split "ss_UU_1627436531" Final b2)) (Split "ss_VV_1627436532" Final b1)) t2, MkStream m (Pair ((:!:) ((:!:) S (TermSymbol (TermSymbol M b3) Deletion)) (TermSymbol (TermSymbol M b) Deletion)) b2) t3, MkStream m (Pair ((:!:) ((:!:) S (TermSymbol (TermSymbol M b3) Deletion)) (TermSymbol (TermSymbol M b) Deletion)) b1) t4, MkStream m ((:!:) ((:!:) ((:!:) (Stack b3) b) b3) b) t2, MkStream m ((:!:) S Epsilon) t2, MkStream m ((:!:) (Stack b3) b) t2, MkStream m S t4, MkStream m S t3, Element ((:!:) ((:!:) ((:!:) ((:!:) S (Split "ss_UU_1627436531" Fragment b2)) (Split "ss_VV_1627436532" Fragment b1)) (Split "ss_UU_1627436531" Final b2)) (Split "ss_VV_1627436532" Final b1)) t2, Element (Pair ((:!:) ((:!:) S (TermSymbol (TermSymbol M b3) Deletion)) (TermSymbol (TermSymbol M b) Deletion)) b2) t3, Element (Pair ((:!:) ((:!:) S (TermSymbol (TermSymbol M b3) Deletion)) (TermSymbol (TermSymbol M b) Deletion)) b1) t4, Element ((:!:) ((:!:) ((:!:) (Stack b3) b) b3) b) t2, Element ((:!:) (Stack b3) b) t2, RuleContext t4, RuleContext t3, RuleContext t2, TermStaticVar (TermSymbol (TermSymbol M Deletion) b3) t4, TermStaticVar (TermSymbol (TermSymbol M Deletion) b3) t3, TermStaticVar (TermSymbol (TermSymbol M Deletion) b) t4, TermStaticVar (TermSymbol (TermSymbol M Deletion) b) t3, TermStaticVar (TermSymbol (TermSymbol M Epsilon) Epsilon) t4, TermStaticVar (TermSymbol (TermSymbol M Epsilon) Epsilon) t3, TerminalStream m (TermSymbol (TermSymbol M Deletion) b3) t4, TerminalStream m (TermSymbol (TermSymbol M Deletion) b3) t3, TerminalStream m (TermSymbol (TermSymbol M Deletion) b) t4, TerminalStream m (TermSymbol (TermSymbol M Deletion) b) t3, TerminalStream m (TermSymbol (TermSymbol M Epsilon) Epsilon) t4, TerminalStream m (TermSymbol (TermSymbol M Epsilon) Epsilon) t3, Apply ((:.) ((:.) (Arg ((:!:) ((:!:) ((:!:) S (TermSymbol (TermSymbol M b3) Deletion)) (TermSymbol (TermSymbol M b) Deletion)) b2)) (TermArg (TermSymbol (TermSymbol M Deletion) b3))) (TermArg (TermSymbol (TermSymbol M Deletion) b)) -> a), Apply ((:.) ((:.) (Arg ((:!:) ((:!:) ((:!:) S (TermSymbol (TermSymbol M b3) Deletion)) (TermSymbol (TermSymbol M b) Deletion)) b1)) (TermArg (TermSymbol (TermSymbol M Deletion) b3))) (TermArg (TermSymbol (TermSymbol M Deletion) b)) -> a), Apply (Arg ((:!:) ((:!:) ((:!:) (Stack b3) b) b3) b) -> a), Apply (Arg ((:!:) ((:!:) ((:!:) ((:!:) S (Split "ss_UU_1627436531" Fragment b2)) (Split "ss_VV_1627436532" Fragment b1)) (Split "ss_UU_1627436531" Final b2)) (Split "ss_VV_1627436532" Final b1)) -> a), Apply (Arg ((:!:) (Stack b3) b) -> a), (~) * (Fun ((:.) ((:.) (Arg ((:!:) ((:!:) ((:!:) S (TermSymbol (TermSymbol M b3) Deletion)) (TermSymbol (TermSymbol M b) Deletion)) b2)) (TermArg (TermSymbol (TermSymbol M Deletion) b3))) (TermArg (TermSymbol (TermSymbol M Deletion) b)) -> a)) ((:.) ((:.) Z a) () -> (:.) ((:.) Z t1) () -> a -> (:.) ((:.) Z ()) a -> (:.) ((:.) Z ()) t1 -> a), (~) * (Fun ((:.) ((:.) (Arg ((:!:) ((:!:) ((:!:) S (TermSymbol (TermSymbol M b3) Deletion)) (TermSymbol (TermSymbol M b) Deletion)) b1)) (TermArg (TermSymbol (TermSymbol M Deletion) b3))) (TermArg (TermSymbol (TermSymbol M Deletion) b)) -> a)) ((:.) ((:.) Z a) () -> (:.) ((:.) Z t1) () -> a -> (:.) ((:.) Z ()) a -> (:.) ((:.) Z ()) t1 -> a), (~) * (Fun (Arg ((:!:) ((:!:) ((:!:) (Stack b3) b) b3) b) -> a)) (a -> t1 -> a -> t1 -> a), (~) * (Fun (Arg ((:!:) ((:!:) ((:!:) ((:!:) S (Split "ss_UU_1627436531" Fragment b2)) (Split "ss_VV_1627436532" Fragment b1)) (Split "ss_UU_1627436531" Final b2)) (Split "ss_VV_1627436532" Final b1)) -> a)) (() -> () -> a -> a -> a), (~) * (Fun (Arg ((:!:) (Stack b3) b) -> a)) (a -> t1 -> a)) => SigPKN m a t t1 -> ((t2 -> t2 -> m t) -> b3) -> ((t3 -> t3 -> m t) -> b2) -> ((t4 -> t4 -> m t) -> b1) -> b -> (:.) ((:.) ((:.) Z b3) b2) b1
- BioInf.GenussFold.PKN: h :: SigPKN m_ac74 s_ac75 r_ac76 t_c_ac77 -> Stream m_ac74 s_ac75 -> m_ac74 r_ac76
+ BioInf.GenussFold.PKN: h :: SigPKN m_ac79 s_ac7a r_ac7b t_c_ac7c -> Stream m_ac79 s_ac7a -> m_ac79 r_ac7b
- BioInf.GenussFold.PKN: jux :: SigPKN m_ac74 s_ac75 r_ac76 t_c_ac77 -> s_ac75 -> t_c_ac77 -> s_ac75 -> t_c_ac77 -> s_ac75
+ BioInf.GenussFold.PKN: jux :: SigPKN m_ac79 s_ac7a r_ac7b t_c_ac7c -> s_ac7a -> t_c_ac7c -> s_ac7a -> t_c_ac7c -> s_ac7a
- BioInf.GenussFold.PKN: nil :: SigPKN m_ac74 s_ac75 r_ac76 t_c_ac77 -> () -> s_ac75
+ BioInf.GenussFold.PKN: nil :: SigPKN m_ac79 s_ac7a r_ac7b t_c_ac7c -> () -> s_ac7a
- BioInf.GenussFold.PKN: nll :: SigPKN m_ac74 s_ac75 r_ac76 t_c_ac77 -> (:.) ((:.) Z ()) () -> s_ac75
+ BioInf.GenussFold.PKN: nll :: SigPKN m_ac79 s_ac7a r_ac7b t_c_ac7c -> (:.) ((:.) Z ()) () -> s_ac7a
- BioInf.GenussFold.PKN: pk1 :: SigPKN m_ac74 s_ac75 r_ac76 t_c_ac77 -> (:.) ((:.) Z s_ac75) () -> (:.) ((:.) Z t_c_ac77) () -> s_ac75 -> (:.) ((:.) Z ()) s_ac75 -> (:.) ((:.) Z ()) t_c_ac77 -> s_ac75
+ BioInf.GenussFold.PKN: pk1 :: SigPKN m_ac79 s_ac7a r_ac7b t_c_ac7c -> (:.) ((:.) Z s_ac7a) () -> (:.) ((:.) Z t_c_ac7c) () -> s_ac7a -> (:.) ((:.) Z ()) s_ac7a -> (:.) ((:.) Z ()) t_c_ac7c -> s_ac7a
- BioInf.GenussFold.PKN: pk2 :: SigPKN m_ac74 s_ac75 r_ac76 t_c_ac77 -> (:.) ((:.) Z s_ac75) () -> (:.) ((:.) Z t_c_ac77) () -> s_ac75 -> (:.) ((:.) Z ()) s_ac75 -> (:.) ((:.) Z ()) t_c_ac77 -> s_ac75
+ BioInf.GenussFold.PKN: pk2 :: SigPKN m_ac79 s_ac7a r_ac7b t_c_ac7c -> (:.) ((:.) Z s_ac7a) () -> (:.) ((:.) Z t_c_ac7c) () -> s_ac7a -> (:.) ((:.) Z ()) s_ac7a -> (:.) ((:.) Z ()) t_c_ac7c -> s_ac7a
- BioInf.GenussFold.PKN: pse :: SigPKN m_ac74 s_ac75 r_ac76 t_c_ac77 -> () -> () -> s_ac75 -> s_ac75 -> s_ac75
+ BioInf.GenussFold.PKN: pse :: SigPKN m_ac79 s_ac7a r_ac7b t_c_ac7c -> () -> () -> s_ac7a -> s_ac7a -> s_ac7a
- BioInf.GenussFold.PKN: unp :: SigPKN m_ac74 s_ac75 r_ac76 t_c_ac77 -> s_ac75 -> t_c_ac77 -> s_ac75
+ BioInf.GenussFold.PKN: unp :: SigPKN m_ac79 s_ac7a r_ac7b t_c_ac7c -> s_ac7a -> t_c_ac7c -> s_ac7a

Files

+ C/genussfold.c view
@@ -0,0 +1,120 @@+#include <stdlib.h>+#include <stdio.h>+#include <string.h>+#include <ctype.h>++/*+ * All types have now the same sizeof they have in Haskell code. "Int" is 64bit+ * in Haskell; "Char" is 31bit.+ */++#define MAX(a,b)      ( ((a) > (b)) ? (a) : (b) )+#define I2(n,i,j)     ((i)*n+(j))+#define I4(n,i,j,k,l) ((i)*n*n*n + (j)*n*n + (k)*n + (l))++long long pseudoknot (long long, int *);+long long pairs (int, int);+void filluv (int name, int *inp, long long *t, long long *uv, long long n, long long i, long long j);++long long pairs (int l,int r) {+  if (l=='A' && r=='U') return 1;+  if (l=='C' && r=='G') return 1;+  if (l=='G' && r=='C') return 1;+  if (l=='G' && r=='U') return 1;+  if (l=='U' && r=='A') return 1;+  if (l=='U' && r=='G') return 1;+  return 0;+};++long long pseudoknot (long long n, int *inp) {+  if (n==0)+    return 0;+  long long i, j, k, l, a, b, c;+  //int at;+  long long cur, new, newL, newM, newR;+  long long *t = calloc (n*n    , sizeof(long long));+  long long *u = calloc (n*n*n*n, sizeof(long long));+  long long *v = calloc (n*n*n*n, sizeof(long long));+  // init+  for (i=0; i<n; i++) for (j=0; j<n; j++) {+    t[I2(n,i,j)] = 0;+    for (k=0; k<n; k++) for (l=0; l<n; l++) {+      u[I4(n,i,j,k,l)] = -999999;+      v[I4(n,i,j,k,l)] = -999999;+    }+  }++  for (i = n-1; i>=0; i--) for (j=i; j<n; j++) {+    // fill t table+    cur = 0;+    if (j>0) {  // T -> T c+      new = t[I2(n,i,j-1)];+      cur = MAX(cur,new);+    }; +    for (a=i; a<=j; a++) {+      new = -999999;+      newL = a<=i     ? 0 : t[I2(n,i,a-1)];+      newR = a+1>=j-1 ? 0 : t[I2(n,a+1,j-1)];+      if (pairs (inp[a],inp[j])) {+        new = newL + newR + 1;+        cur = MAX(cur,new);+//        printf ("P %3d %c %3d %c -- %4d + %4d + 1\n",a, inp[a],j, inp[j], newL, newR);+      }+    }; // n^3 loop+    for (a=i; a<=j; a++) for (b=a+1; b<=j; b++) for (c=b+1; c<j; c++) {+      // ~~ i ~~ a ~~ b ~~ c ~~ j ~~+      if (1) { // (i<a && a<b && b<c && c<=j) {+        newL = u[I4(n,i  ,a,b+1,c)];+        newR = v[I4(n,a+1,b,c+1,j)];+        new = newL + newR;+        cur = MAX(cur,new);+//        printf ("Q %3d %c %3d %c %3d %c %3d %c %3d %c -- %4d + %4d = %4d\n", i,inp[i], a,inp[a], b,inp[b], c,inp[c], j,inp[j], newL, newR, new);+//        printf ("L %3d %3d %3d %3d %3d   %3d\n", n, i  , a, b+1, c, newL);+//        printf ("R %3d (%3d) %3d %3d %3d %3d   %3d\n", n, i, a+1, b, c+1, j, newR);+      }+    }; // n^5 pseudoknot loop+    t[i*n+j] = cur;+//    printf ("  %3d %c %3d %c %4d\n",i,inp[i],j,inp[j], t[I2(n,i,j)]);+    // fill up <U>+    filluv ('U', inp, t, u, n, i, j);+    // fill up <V>+    filluv ('V', inp, t, v, n, i, j);+  } // the n^2 loop++  cur = t[I2(n,0,n-1)];++  free (t);+  free (u);+  free (v);+  return cur;+}++void filluv (int name, int *inp, long long *t, long long *uv, long long n, long long i, long long j) {+  long long k, l, a, b;+  long long cur, newL, newM, newR, new;+  for (k=i; k<=j; k++) for (l=k+1; l<=j; l++) {+    // u+    cur = -999999;+    // loop over inner part.+    for (a=i; a<=k; a++) {+      for (b=l-1; b<=j; b++) {+        if (pairs(inp[a], inp[j])) {+          newL = i<a                ?  t[I2(n,i,a-1)]     : 0;+          newM = a<k && l<=b && b<j ? uv[I4(n,a+1,k,l,b)] : 0;+          newR = b+1<j              ?  t[I2(n,b+1,j-1)]   : 0;+          new = newL + newM + newR + 1;+          cur = MAX(cur,new);+//          printf ("%c %d %d (%d %d) %d %d   %d %d %d\n", name, i,a, k,l, b,j, newL, newM, newR);+        }+        else {+          cur = MAX(cur,-888888);+        }; // if pairs+      }; // for b+//        if (i==0 && k==1 && l==3 && j==4)+    }; // for a,b+//    if (name=='U') // && i==0 && k==2 && l==4 && j==7)+//    printf ("%c %3d %3d %3d %3d   -- (%d) %3d\n", name, i,k,l,j, uv[I4(n,i,k,l,j)], cur );+    uv[I4(n,i,k,l,j)] = cur;+  };+};+
GenussFold.cabal view
@@ -1,5 +1,5 @@ name:           GenussFold-version:        0.0.0.1+version:        0.0.0.2 author:         Christian Hoener zu Siederdissen, 2015 copyright:      Christian Hoener zu Siederdissen, 2015 homepage:       https://github.com/choener/GenussFold@@ -44,7 +44,7 @@  library   build-depends: base                   >= 4.7      && < 4.9-               , ADPfusion              >= 0.4.1    && < 0.4.2+               , ADPfusion              >= 0.4.1.1  && < 0.4.2                , ansi-wl-pprint         >= 0.6.7    && < 0.6.8 --               , BiobaseTurner          >= 0.3.2    && < 0.3.3 --               , BiobaseTypes           >= 0.1.1    && < 0.1.2@@ -108,6 +108,32 @@   ghc-options:     -O2     -funbox-strict-fields++++test-suite properties-fast+  type:+    exitcode-stdio-1.0+  main-is:+    properties-fast.hs+  ghc-options:+    -threaded -rtsopts -with-rtsopts=-N -O2 -funbox-strict-fields+  hs-source-dirs:+    tests+  default-language:+    Haskell2010+  default-extensions: BangPatterns+                    , CPP+                    , ForeignFunctionInterface+                    , TemplateHaskell+  build-depends: base+               , GenussFold+               , QuickCheck+               , test-framework               >= 0.8  && < 0.9+               , test-framework-quickcheck2   >= 0.3  && < 0.4+               , test-framework-th            >= 0.2  && < 0.3+  c-sources: C/genussfold.c+  cc-options: -fPIC   
changelog.md view
@@ -1,3 +1,8 @@+0.0.0.2+-------++- quickcheck tests for GenussFold+ 0.0.0.1 ------- 
+ tests/properties-fast.hs view
@@ -0,0 +1,48 @@++-- | Test all properties automatically. We keep the QC2 modules in the main+-- library for now, as this allows for more efficient repl tests.++module Main where++import Data.Char (toUpper)+import Debug.Trace+import Foreign.C.String+import System.IO.Unsafe (unsafePerformIO)+import Test.Framework.Providers.QuickCheck2+import Test.Framework.TH+import Test.QuickCheck+import Control.Monad (replicateM)++import BioInf.GenussFold.PKN (pknPairMax)++++foreign import ccall pseudoknot :: Int -> CWString -> IO Int++c_pseudoknot :: String -> Int+c_pseudoknot s' = unsafePerformIO $ do+  let s = map toUpper s'+  withCWString s $ \cw ->+    pseudoknot (length s) cw++++prop_GenussFold_HS_C :: Nts -> Bool+prop_GenussFold_HS_C (Nts i) = (fst $ pknPairMax 1 i) == (c_pseudoknot i)++++newtype Nts = Nts [Char]+  deriving (Eq,Ord)++instance Show Nts where+  show (Nts xs) = show xs++instance Arbitrary Nts where+  arbitrary = do k <- choose (1,50)+                 fmap Nts $ replicateM k (elements "ACGU")+  shrink (Nts xs) = map Nts $ shrinkList (const []) xs++main :: IO ()+main = $(defaultMainGenerator)+