packages feed

swish 0.6.0.0 → 0.6.0.1

raw patch · 8 files changed

+248/−109 lines, 8 filesPVP: minor bump suggested

API additions: PVP suggests at least a minor version bump

API changes (from Hackage documentation)

+ Swish.RDF.GraphClass: instance Hashable lb => Hashable (Arc lb)
+ Swish.RDF.GraphMem: instance Hashable LabelMem

Files

Data/Interned/URI.hs view
@@ -56,8 +56,8 @@ instance Uninternable InternedURI where   unintern (InternedURI _ b) = b  --- Rather than be clever, use the reverse of the string--- representation of the URI+-- Rather than access the URI components, just use the reverse of the+-- string representation of the URI. instance Hashable (Description InternedURI) where   hash = hashWithSalt 5381 -- use the stringSalt value from Data.Hashable   hashWithSalt salt (DU u) = hashWithSalt salt ((reverse . show) u)
Swish/RDF/GraphClass.hs view
@@ -34,6 +34,8 @@ import qualified Data.Foldable as F import qualified Data.Traversable as T +import Data.Hashable (Hashable(..))+ import Data.List (foldl', union, (\\))  --  NOTE:  I wanted to declare this as a subclass of Functor, but@@ -132,6 +134,10 @@        -- | Calculate the hash of the label using the supplied seed.   labelHash   :: Int -> lb -> Int     +  +  -- could provide a default of +  --   labelHash = hashWithSalt+  -- but this would then force a Hashable constraint        -- | Extract the local id from a variable node.                    getLocal    :: lb -> String@@ -150,6 +156,10 @@               , aobj :: lb   -- ^ The object of the arc.               }             deriving (Eq, Functor, F.Foldable, T.Traversable)++instance (Hashable lb) => Hashable (Arc lb) where+  hash (Arc s p o) = hash s `hashWithSalt` p `hashWithSalt` o+  hashWithSalt salt (Arc s p o) = salt `hashWithSalt` s `hashWithSalt` p `hashWithSalt` o  -- | Return the subject of the arc. arcSubj :: Arc lb -> lb
Swish/RDF/GraphMatch.hs view
@@ -34,19 +34,20 @@       ) where  import Control.Exception.Base (assert)+import Control.Arrow (second)  import Data.Ord (comparing) import Data.List (foldl', nub, sortBy, partition)-import qualified Data.List+import Data.Hashable (combine)+import qualified Data.List as L  import Swish.RDF.GraphClass (Arc(..), Label(..),-                             arc, arcSubj, arcPred, arcObj, arcLabels,+                             arcLabels,                              hasLabel, arcToTriple) import Swish.Utils.LookupMap (LookupEntryClass(..), LookupMap(..),                               makeLookupMap, listLookupMap, mapFind, mapReplaceAll,                               mapAddIfNew, mapReplaceMap, mapMerge) import Swish.Utils.ListHelpers (select, equiv, pairSort, pairGroup, pairUngroup)-import Swish.Utils.MiscHelpers (hash, hashModulus)  -------------------------- --  Label index value type@@ -129,7 +130,7 @@ -}  ecRemoveLabel :: (Label lb) => EquivalenceClass lb -> lb -> EquivalenceClass lb-ecRemoveLabel (lv,ls) l = (lv,Data.List.delete l ls)+ecRemoveLabel xs l = second (L.delete l) xs  ------------------------------------------------------------ --  Augmented graph label value - for graph matching@@ -152,16 +153,14 @@ makeScopedLabel = ScopedLabel   makeScopedArc :: (Label lb) => Int -> Arc lb -> Arc (ScopedLabel lb)-makeScopedArc scope a1 = arc (s arcSubj a1) (s arcPred a1) (s arcObj a1)-    where-        s f a = ScopedLabel scope (f a)+makeScopedArc scope = fmap (ScopedLabel scope)  instance (Label lb) => Label (ScopedLabel lb) where     getLocal  lab    = error $ "getLocal for ScopedLabel: "++show lab     makeLabel locnam = error $ "makeLabel for ScopedLabel: "++locnam     labelIsVar (ScopedLabel _ lab)   = labelIsVar lab     labelHash seed (ScopedLabel scope lab)-        | labelIsVar lab    = hash seed $ show scope ++ "???"+        | labelIsVar lab    = seed `combine` scope -- MH.hash seed $ show scope ++ "???"         | otherwise         = labelHash seed lab  instance (Label lb) => Eq (ScopedLabel lb) where@@ -363,6 +362,13 @@         assert (ev1==ev2) -- "GraphMatch2: Equivalence class value mismatch" $         $ try glp +-- this was in Swish.Utils.MiscHelpers along with a simple hash-based function+-- based on Sedgewick, Algorithms in C, p233. As we have now moved to using+-- Data.Hashable it is not clear whether this is still necessary or sensible.+--+hashModulus :: Int+hashModulus = 16000001+ -- | Returns a string representation  of a LabelMap value -- showLabelMap :: (Label lb) => LabelMap lb -> String@@ -391,8 +397,8 @@ --  resulting label map is incremented. -- newLabelMap :: (Label lb) => LabelMap lb -> [(lb,Int)] -> LabelMap lb-newLabelMap (LabelMap g f) [] = LabelMap (g+1) f -- new generation-newLabelMap lmap (lv:lvs)     = setLabelHash (newLabelMap lmap lvs) lv+newLabelMap lmap []       = newGenerationMap lmap+newLabelMap lmap (lv:lvs) = setLabelHash (newLabelMap lmap lvs) lv  -- | Replace a label and its associated value in a label map --  with a new value using the supplied hash value and the current@@ -437,7 +443,8 @@  hashVal :: (Label lb) => Int -> lb -> Int hashVal seed lab =-    if labelIsVar lab then hash seed "???" else labelHash seed lab+  if labelIsVar lab then seed `combine` 23 else labelHash seed lab+  -- if labelIsVar lab then hash seed "???" else labelHash seed lab  equivalenceClasses ::    (Label lb) @@ -502,16 +509,18 @@         LabelMap gen2 lm2 =             remapLabels gs2 lmap $ foldl1 (++) $ map (ecLabels . snd) ecpairs         lm' = mapReplaceMap lm $ mapMerge lm1 lm2+        +        tmap f (a,b) = (f a, f b)+                 -- ecGroups :: [([EquivalenceClass lb],[EquivalenceClass lb])]-        ecGroups  = [ (remapEc ec1,remapEc ec2) | (ec1,ec2) <- ecpairs ]+        ecGroups  = map (tmap remapEc) ecpairs         ecpairs'  = concatMap (uncurry zip) ecGroups         newPart   = any pairG1 lenGroups         matchPart = all pairEq lenGroups-        lenGroups = map subLength ecGroups-        pairEq (p1,p2) = p1 == p2+        lenGroups = map (tmap length) ecGroups+        pairEq = uncurry (==)         pairG1 (p1,p2) = p1 > 1 || p2 > 1-        subLength (ls1,ls2) = (length ls1,length ls2)-        remapEc ec = pairGroup $ map (newIndex lm') $ pairUngroup ec+        remapEc = pairGroup . map (newIndex lm') . pairUngroup          newIndex x (_,lab) = (mapFind nullLabelVal lab x,lab)  -- | Calculate a new index value for a supplied list of labels based on the@@ -534,7 +543,8 @@         newIndex l             | labelIsVar l  = mapAdjacent l     -- adjacency classifies variable labels             | otherwise     = hashVal gen l     -- otherwise rehash (to disentangle collisions)-        mapAdjacent l       = sum (sigsOver l) `rem` hashModulus+        -- mapAdjacent l       = sum (sigsOver l) `rem` hashModulus+        mapAdjacent l       = sum (sigsOver l) `combine` hashModulus -- is this a sensible replacement for `rem` MH.hashModulus                 sigsOver l          = select (hasLabel l) gs (arcSignatures lmap gs)  -- | Return list of distinct labels used in a graph@@ -557,7 +567,10 @@         sigCalc (s,p,o)  =             ( labelVal2 s +               labelVal2 p * 3 +-              labelVal2 o * 5 ) `rem` hashModulus+              labelVal2 o * 5 )+            `combine` hashModulus+            -- `rem` hashModulus+                   labelVal         = mapLabelIndex lmap         labelVal2        = uncurry (*) . labelVal 
Swish/RDF/GraphMem.hs view
@@ -32,9 +32,9 @@  import Swish.RDF.GraphClass import Swish.RDF.GraphMatch-import Swish.Utils.MiscHelpers-    ( hash )+-- import Swish.Utils.MiscHelpers (hash) +import Data.Hashable (Hashable(..), combine) import Data.Ord (comparing)  import qualified Data.Foldable as F@@ -114,13 +114,20 @@     = LF String     | LV String +instance Hashable LabelMem where+  hash (LF l) = 1 `hashWithSalt` l+  hash (LV l) = 2 `hashWithSalt` l+  hashWithSalt salt (LF l) = salt `combine` 1 `hashWithSalt` l+  hashWithSalt salt (LV l) = salt `combine` 2 `hashWithSalt` l+ instance Label LabelMem where     labelIsVar (LV _)   = True     labelIsVar _        = False     getLocal   (LV loc) = loc     getLocal   lab      = error "getLocal of non-variable label: " ++ show lab     makeLabel           = LV -    labelHash  seed lb  = hash seed (show lb)+    -- labelHash  seed lb  = hash seed (show lb)+    labelHash = hashWithSalt  instance Eq LabelMem where     (LF l1) == (LF l2)  = l1 == l2
Swish/Utils/MiscHelpers.hs view
@@ -13,12 +13,14 @@ --  This module defines a random set of helper functions --  used by the graph handling code. --+--  This module is *deprecated* and will be removed at the next possible+--  release.+-- --------------------------------------------------------------------------------  module Swish.Utils.MiscHelpers-      ( hash -- RDFGraph, GraphMem, GraphMatch-      , hashModulus -- GraphMatch-      +      ( hash+      , hashModulus       ) where 
Swish/Utils/QName.hs view
@@ -69,11 +69,13 @@ instance IsString QName where   fromString = qnameFromString                +-- | Equality is determined by a case sensitive comparison of the               +-- URI. instance Eq QName where   -- see qnEq comments below   (QName u1 _ _) == (QName u2 _ _) = u1 == u2 --- ugly, use show instance+-- ugly, use show instance OR switch to the ordering of InternedURI      instance Ord QName where   {-@@ -104,7 +106,7 @@         (up2,ur2) = splitAt n u2   -}   --- The format of show QName may well change to remove the <>+-- | The format used to display the URI is @<uri>@. instance Show QName where     show (QName u _ _) = "<" ++ show u ++ ">" 
swish.cabal view
@@ -1,5 +1,5 @@ Name:               swish-Version:            0.6.0.0+Version:            0.6.0.1 Stability:          experimental License:            LGPL License-file:       LICENSE @@ -45,6 +45,9 @@   * Complete, ready-to-run, command-line and script-driven programs.   .   Changes:+  .+  [Version 0.6.0.1] Moved to using hashing routine using the Data.Hashable+  interface rather than Swish.Utils.MiscHelpers which is deprecated.   .   [Version 0.6.0.0] Add Data.Interned.URI and use it to speed up the QName   equality check.
tests/GraphTest.hs view
@@ -14,6 +14,13 @@ -- -------------------------------------------------------------------------------- +{- ++Note: after changing the hash module the order and values of some+of the tests; I have not checked that the new ordering makes sense.++-}+ module Main where  import qualified Data.Foldable as F@@ -28,7 +35,6 @@ import Data.Ord (comparing)  import Swish.Utils.ListHelpers-import Swish.Utils.MiscHelpers import Swish.RDF.GraphClass (Arc(..), LDGraph(..),                              Label(..), arc,                              arcFromTriple,arcToTriple)@@ -140,25 +146,6 @@     , testSubset "08" False [1,2,3]       []     ] --- hash--testHash :: String -> Bool -> Int -> Int -> Test-testHash lab eq h1 h2 = testeq ("Hash"++lab ) eq (h1 == h2)--testHashEq :: String -> Int -> Int -> Test-testHashEq lab = testeq ("Hash"++lab ) --testHashSuite :: Test-testHashSuite = TestList-    [ testHash "01" True  (hash 0 base1) (hash 0 base1)-    , testHash "02" True  (hash 2 "")    (hash 2 "")-    , testHash "03" False (hash 3 base1) (hash 3 base2)-    , testHash "04" False (hash 4 base1) (hash 5 base1)-    , testHash "05" False (hash 2 "")    (hash 3 "")-    , testHashEq "06"     1424775        (hash 3 base1)-    , testHashEq "07"     11801303       (hash 3 base2)-    ]- ------------------------------------------------------------ --  Simple graph label tests ------------------------------------------------------------@@ -170,10 +157,11 @@     , testeq "Lab03" False (labelIsVar lab2f)     , testeq "Lab04" True  (labelIsVar lab2v) -    , testeq "Lab05"  3436883 (labelHash 1 lab1f)-    , testeq "Lab06" 10955600 (labelHash 1 lab1v)-    , testeq "Lab07"  3436884 (labelHash 1 lab2f)-    , testeq "Lab08" 10955601 (labelHash 1 lab2v)+    , testeq "Lab05" 39495998 (labelHash 1 lab1f)+    , testeq "Lab06" 45349309 (labelHash 1 lab1v)+    , testeq "Lab07" 39495997 (labelHash 1 lab2f)+    , testeq "Lab08" 45349310 (labelHash 1 lab2v)+          , testeq "Lab09" "!lab1" (show lab1f)     , testeq "Lab10" "?lab1" (show lab1v)@@ -662,23 +650,85 @@ -- assignLabels :: (Label lb) => [lb] -> LabelMap lb -> LabelMap lb  lmap5 :: LabelMap LabelMem+{- lmap5 = tstLabelMap 2 [(s1,(1,142577)),(s2,(1,142578)),(s3,(1,142579)),                        (p1,(1,142385)),(p2,(1,142386)),(p3,(1,142387)),                        (o1,(1,142321)),(o2,(1,142322)),(o3,(1,142323)),                        (l1,(1,142129)),(l4,(1,1709580)),(l10,(1,3766582)),                        (b3,(1,262143)),(b4,(1,262143))]-        +-}++bhash :: Int+bhash = 23++l1hash, l4hash, l10hash :: Int+l1hash = 2524+l4hash = -1302210307+l10hash = 10836024  ++l1hash2, l4hash2, l10hash2 :: Int+l1hash2 = 2524+l4hash2 = -1302210307+l10hash2 = 10836024  ++o1hash, o2hash, o3hash :: Int+o1hash = 2623+o2hash = 2620+o3hash = 2621++p1hash, p2hash, p3hash :: Int+p1hash = 2624+p2hash = 2627+p3hash = 2626++s1hash, s2hash, s3hash :: Int+s1hash = 2723+s2hash = 2720+s3hash = 2721++lmap5 = tstLabelMap 2 +        [+          (b4,(1,bhash)),+          (b3,(1,bhash)),+          (l10,(1,l10hash)),+          (l4,(1,l4hash)),+          (l1,(1,l1hash)),+          (o3,(1,o3hash)),+          (o2,(1,o2hash)),+          (o1,(1,o1hash)),+          (p3,(1,p3hash)),+          (p2,(1,p2hash)),+          (p1,(1,p1hash)),+          (s3,(1,s3hash)),+          (s2,(1,s2hash)),+          (s1,(1,s1hash))+        ]+ testAssignLabelMap05 :: Test         testAssignLabelMap05 = testeq "AssignLabels05" lmap5                         (newGenerationMap $ assignLabelMap ls5 emptyMap)  lmap6 :: LabelMap LabelMem-lmap6 = tstLabelMap 2 [(s1,(1,142577)),(s2,(1,142578)),(s3,(1,142579)),-                       (p1,(1,142385)),(p2,(1,142386)),(p3,(1,142387)),-                       (o1,(1,142321)),(o2,(1,142322)),(o3,(1,142323)),-                       (l1,(1,142129)),(l4,(1,1709580)),(l10,(1,3766582)),-                       (b1,(2,262143)),(b2,(2,262143)),(b3,(1,262143)),(b4,(1,262143))]-+lmap6 = tstLabelMap 2+        [+          (b2,(2,bhash)),+          (b1,(2,bhash)),+          (b4,(1,bhash)),+          (b3,(1,bhash)),+          (l10,(1,l10hash)),+          (l4,(1,l4hash)),+          (l1,(1,l1hash)),+          (o3,(1,o3hash)),+          (o2,(1,o2hash)),+          (o1,(1,o1hash)),+          (p3,(1,p3hash)),+          (p2,(1,p2hash)),+          (p1,(1,p1hash)),+          (s3,(1,s3hash)),+          (s2,(1,s2hash)),+          (s1,(1,s1hash))+        ]+         testAssignLabelMap06 :: Test testAssignLabelMap06 = testeq "AssignLabels06" lmap6 (assignLabelMap ls6 lmap5) @@ -804,19 +854,42 @@               assignLabelMap (graphLabels as61) emptyMap  eq1ltst :: LabelMap (ScopedLabel LabelMem)-eq1ltst     = tstLabelMap 2 [-                             (s1_1,(1,142577)),(s2_1,(1,142578)),(s3_1,(1,142579)),-                             (p1_1,(1,142385)),(p2_1,(1,142386)),(p3_1,(1,142387)),-                             (o1_1,(1,142321)),(o2_1,(1,142322)),(o3_1,(1,142323)),-                             (l1_1,(1,142129)),(l4_1,(1,1709580)),(l10_1,(1,3766582)),-                             (b1_1,(1,262143)),(b2_1,(1,262143)),(b3_1,(1,262143)),(b4_1,(1,262143)),-                             (s1_2,(1,142577)),(s2_2,(1,142578)),(s3_2,(1,142579)),-                             (p1_2,(1,142385)),(p2_2,(1,142386)),(p3_2,(1,142387)),-                             (o1_2,(1,142321)),(o2_2,(1,142322)),(o3_2,(1,142323)),-                             (l1_2,(1,142129)),(l4_2,(1,1709580)),(l10_2,(1,3766582)),-                             (b1_2,(1,262143)),(b2_2,(1,262143)),(b3_2,(1,262143)),(b4_2,(1,262143))-                            ]-              +eq1ltst = tstLabelMap 2 +          [+            (b4_2,(1,bhash)),+            (b3_2,(1,bhash)),+            (p3_2,(1,p3hash)),+            (b2_2,(1,bhash)),+            (p2_2,(1,p2hash)),+            (b1_2,(1,bhash)),+            (l10_2,(1,l10hash)),+            (l4_2,(1,l4hash)),+            (l1_2,(1,l1hash)),+            (o3_2,(1,o3hash)),+            (s3_2,(1,s3hash)),+            (o2_2,(1,o2hash)),+            (s2_2,(1,s2hash)),+            (o1_2,(1,o1hash)),+            (p1_2,(1,p1hash)),+            (s1_2,(1,s1hash)),+            (b4_1,(1,bhash)),+            (b3_1,(1,bhash)),+            (p3_1,(1,p3hash)),+            (b2_1,(1,bhash)),+            (p2_1,(1,p2hash)),+            (b1_1,(1,bhash)),+            (l10_1,(1,l10hash)),+            (l4_1,(1,l4hash)),+            (l1_1,(1,l1hash)),+            (o3_1,(1,o3hash)),+            (s3_1,(1,s3hash)),+            (o2_1,(1,o2hash)),+            (s2_1,(1,s2hash)),+            (o1_1,(1,o1hash)),+            (p1_1,(1,p1hash)),+            (s1_1,(1,s1hash))+            ]+           testEqAssignMap01 :: Test               testEqAssignMap01 = testeq "EqAssignMap01" eq1ltst eq1lmap @@ -882,17 +955,38 @@               assignLabelMap (graphLabels as41) emptyMap                eq2ltst :: LabelMap (ScopedLabel LabelMem)-eq2ltst     = tstLabelMap 2 [(s1_1,(1,142577)),(s2_1,(1,142578)),(s3_1,(1,142579)),-                             (p1_1,(1,142385)),(p2_1,(1,142386)),(p3_1,(1,142387)),-                             (o1_1,(1,142321)),(o2_1,(1,142322)),(o3_1,(1,142323)),-                             (l1_1,(1,142129)),(l4_1,(1,1709580)),(l10_1,(1,3766582)),-                             (b1_1,(1,262143)),(b2_1,(1,262143)),-                             (s1_2,(1,142577)),(s2_2,(1,142578)),(s3_2,(1,142579)),-                             (p1_2,(1,142385)),(p2_2,(1,142386)),(p3_2,(1,142387)),-                             (o1_2,(1,142321)),(o2_2,(1,142322)),(o3_2,(1,142323)),-                             (l1_2,(1,142129)),(l4_2,(1,1709580)),(l10_2,(1,3766582)),-                             (b1_2,(1,262143)),(b2_2,(1,262143))]-              +eq2ltst = tstLabelMap 2+          [+            (p3_2,(1,p3hash)),+            (b2_2,(1,bhash)),+            (b1_2,(1,bhash)),+            (p2_2,(1,p2hash)),+            (l10_2,(1,l10hash)),+            (l4_2,(1,l4hash)),+            (l1_2,(1,l1hash)),+            (o3_2,(1,o3hash)),+            (s3_2,(1,s3hash)),+            (o2_2,(1,o2hash)),+            (s2_2,(1,s2hash)),+            (o1_2,(1,o1hash)),+            (p1_2,(1,p1hash)),+            (s1_2,(1,s1hash)),+            (p3_1,(1,p3hash)),+            (b2_1,(1,bhash)),+            (p2_1,(1,p2hash)),+            (b1_1,(1,bhash)),+            (l10_1,(1,l10hash)),+            (l4_1,(1,l4hash)),+            (l1_1,(1,l1hash)),+            (o3_1,(1,o3hash)),+            (s3_1,(1,s3hash)),+            (o2_1,(1,o2hash)),+            (s2_1,(1,s2hash)),+            (o1_1,(1,o1hash)),+            (p1_1,(1,p1hash)),+            (s1_1,(1,s1hash))+          ]+ testEqAssignMap21 :: Test testEqAssignMap21 = testeq "EqAssignMap21" eq2ltst eq2lmap @@ -960,16 +1054,23 @@               assignLabelMap (graphLabels as22) emptyMap                eq3ltst :: LabelMap (ScopedLabel LabelMem)-eq3ltst     = tstLabelMap 2-    [ (s1_1,(1,142577))-    , (p1_1,(1,142385))-    , (o1_1,(1,142321))-    , (s1_2,(1,142577)), (s2_2,(1,142578)), (s3_2,(1,142579))-    , (p1_2,(1,142385))-    , (o1_2,(1,142321)), (o2_2,(1,142322)), (o3_2,(1,142323))-    , (l1_2,(1,142129)), (l4_2,(1,1709580)), (l10_2,(1,3766582))+eq3ltst = tstLabelMap 2+    [ +      (o1_1,(1,o1hash))+    , (p1_1,(1,p1hash))+    , (s1_1,(1,s1hash))+    , (l10_2,(1,l10hash))+    , (l4_2,(1,l4hash))+    , (l1_2,(1,l1hash))+    , (o3_2,(1,o3hash))+    , (s3_2,(1,s3hash))+    , (o2_2,(1,o2hash))+    , (s2_2,(1,s2hash))+    , (o1_2,(1,o1hash))+    , (p1_2,(1,p1hash))+    , (s1_2,(1,s1hash))      ]-    + testEqAssignMap32 :: Test     testEqAssignMap32 = testeq "EqAssignMap32" eq3ltst eq3lmap @@ -981,9 +1082,9 @@  ec31test :: [EquivArgs] ec31test =-    [ ((1,142321),[o1_1])-    , ((1,142385),[p1_1])-    , ((1,142577),[s1_1])+    [ ((1,2623),[o1_1])+    , ((1,2624),[p1_1])+    , ((1,2723),[s1_1])     ]  ec32 :: [EquivClass]@@ -991,18 +1092,19 @@  ec32test :: [EquivArgs] ec32test =-    [ ((1,142129),[l1_2])-    , ((1,142321),[o1_2])-    , ((1,142322),[o2_2])-    , ((1,142323),[o3_2])-    , ((1,142385),[p1_2])-    , ((1,142577),[s1_2])-    , ((1,142578),[s2_2])-    , ((1,142579),[s3_2])-    , ((1,1709580),[l4_2])-    , ((1,3766582),[l10_2])+    [ +      ((1,-1302210307),[l4_2])+    , ((1,2524),[l1_2])+    , ((1,2620),[o2_2])+    , ((1,2621),[o3_2])+    , ((1,2623),[o1_2])+    , ((1,2624),[p1_2])+    , ((1,2720),[s2_2])+    , ((1,2721),[s3_2])+    , ((1,2723),[s1_2])+    , ((1,10836024),[l10_2])     ]-+   testEquivClass33_1, testEquivClass33_2 :: Test testEquivClass33_1 = testeq "EquivClass33_1" ec31test ec31 testEquivClass33_2 = testeq "EquivClass33_2" ec32test ec32@@ -1013,6 +1115,8 @@ ec3pairs :: [(EquivClass, EquivClass)] ec3pairs = zip (pairSort ec31) (pairSort ec32) +{-  This is a pointless test in this case+ ec3test :: [(EquivClass, EquivClass)] ec3test  =     [ ( ((1,142321),[o1_1]), ((1,142321),[o1_2]) )@@ -1020,7 +1124,6 @@     , ( ((1,142577),[s1_1]), ((1,142577),[s1_2]) )     ] -{-  This is a pointless test in this case testEquivClass33_3 = testeq "EquivClass33_3" ec3test ec3pairs -} @@ -1731,7 +1834,6 @@ allTests = TestList   [ testSelectSuite   , testSubsetSuite-  , testHashSuite   , testLabSuite   , testGraphSuite   , testLabelEqSuite