packages feed

psqueues 0.1.1.0 → 0.2.0.0

raw patch · 10 files changed

+65/−5 lines, 10 filesdep ~basedep ~deepseq

Dependency ranges changed: base, deepseq

Files

CHANGELOG view
@@ -1,3 +1,7 @@+- 0.2.0.0+    * Add convenience `deleteMin` function+    * Bump `deepseq` dependency to 1.4+ - 0.1.1.0     * Remove constraints from `size` 
psqueues.cabal view
@@ -1,5 +1,5 @@ name: psqueues-version: 0.1.1.0+version: 0.2.0.0 license: BSD3 license-file: LICENSE maintainer: haskell@better.com@@ -63,7 +63,7 @@      build-depends:           base     >= 4.2   && < 5-        , deepseq  >= 1.2   && < 1.4+        , deepseq  >= 1.2   && < 1.5         , hashable >= 1.2.1 && < 1.3      if impl(ghc>=6.10)
src/Data/HashPSQ.hs view
@@ -24,6 +24,7 @@        -- * Delete/update     , delete+    , deleteMin     , alter     , alterMin 
src/Data/HashPSQ/Internal.hs view
@@ -23,6 +23,7 @@        -- * Delete/update     , delete+    , deleteMin     , alter     , alterMin @@ -206,6 +207,16 @@     Nothing         -> t     Just (_, _, t') -> t' +-- | /O(min(n,W))/ Delete the binding with the least priority, and return+-- rest of the queue stripped of that binding. In case the queue is empty, the+-- empty queue is returned again.+{-# INLINE deleteMin #-}+deleteMin+    :: (Hashable k, Ord k, Ord p) => HashPSQ k p v -> HashPSQ k p v+deleteMin t = case minView t of+    Nothing            -> t+    Just (_, _, _, t') -> t'+ -- | /O(min(n,W))/ The expression @alter f k map@ alters the value @x@ at @k@, -- or absence thereof. 'alter' can be used to insert, delete, or update a value -- in a queue. It also allows you to calculate an additional value @b@.@@ -340,7 +351,7 @@ -- Traversals -------------------------------------------------------------------------------- --- | /O(n)/ Modify every value in the queueu.+-- | /O(n)/ Modify every value in the queue. {-# INLINABLE map #-} map :: (k -> p -> v -> w) -> HashPSQ k p v -> HashPSQ k p w map f (HashPSQ ipsq) = HashPSQ (IntPSQ.map (\_ p v -> mapBucket p v) ipsq)
src/Data/IntPSQ.hs view
@@ -27,6 +27,7 @@        -- * Delete/update     , delete+    , deleteMin     , alter     , alterMin 
src/Data/IntPSQ/Internal.hs view
@@ -24,6 +24,7 @@        -- * Delete/update     , delete+    , deleteMin     , alter     , alterMin @@ -291,6 +292,15 @@           | zero k m       -> binShrinkL k' p' x' m (go l) r           | otherwise      -> binShrinkR k' p' x' m l      (go r) +-- | /O(min(n,W))/ Delete the binding with the least priority, and return+-- rest of the queue stripped of that binding. In case the queue is empty, the+-- empty queue is returned again.+{-# INLINE deleteMin #-}+deleteMin :: Ord p => IntPSQ p v -> IntPSQ p v+deleteMin t = case minView t of+    Nothing            -> t+    Just (_, _, _, t') -> t'+ -- | /O(min(n,W))/ The expression @alter f k map@ alters the value @x@ at @k@, -- or absence thereof. 'alter' can be used to insert, delete, or update a value -- in a queue. It also allows you to calculate an additional value @b@.@@ -431,7 +441,7 @@ -- Traversal ------------------------------------------------------------------------------ --- | /O(n)/ Modify every value in the queueu.+-- | /O(n)/ Modify every value in the queue. {-# INLINABLE map #-} map :: (Int -> p -> v -> w) -> IntPSQ p v -> IntPSQ p w map f =
src/Data/OrdPSQ.hs view
@@ -34,6 +34,7 @@        -- * Delete/Update     , delete+    , deleteMin     , alter     , alterMin 
src/Data/OrdPSQ/Internal.hs view
@@ -23,6 +23,7 @@        -- * Delete/Update     , delete+    , deleteMin     , alter     , alterMin @@ -233,6 +234,16 @@             | k <= m    -> go (Winner e' tl m) `play` (Winner e tr m')             | otherwise -> (Winner e' tl m) `play` go (Winner e tr m') +-- | /O(log n)/ Delete the binding with the least priority, and return+-- rest of the queue stripped of that binding. In case the queue is empty, the+-- empty queue is returned again.+{-# INLINE deleteMin #-}+deleteMin+    :: (Ord k, Ord p) => OrdPSQ k p v -> OrdPSQ k p v+deleteMin t = case minView t of+    Nothing            -> t+    Just (_, _, _, t') -> t'+ -- | /O(log n)/ The expression @alter f k map@ alters the value @x@ at @k@, or -- absence thereof. 'alter' can be used to insert, delete, or update a value -- in a queue. It also allows you to calculate an additional value @b@.@@ -352,7 +363,7 @@ -- Traversals -------------------------------------------------------------------------------- --- | /O(n)/ Modify every value in the queueu.+-- | /O(n)/ Modify every value in the queue. {-# INLINABLE map #-} map :: forall k p v w. (k -> p -> v -> w) -> OrdPSQ k p v -> OrdPSQ k p w map f =
tests/Data/PSQ/Class.hs view
@@ -42,6 +42,8 @@     -- Delete/update     delete         :: Ord p => Key psq -> psq p v -> psq p v+    deleteMin+        :: Ord p => psq p v -> psq p v     alter         :: Ord p         => (Maybe (p, v) -> (b, Maybe (p, v)))@@ -88,6 +90,7 @@     singleton  = IntPSQ.singleton     insert     = IntPSQ.insert     delete     = IntPSQ.delete+    deleteMin  = IntPSQ.deleteMin     alter      = IntPSQ.alter     alterMin   = IntPSQ.alterMin     fromList   = IntPSQ.fromList@@ -112,6 +115,7 @@     singleton  = OrdPSQ.singleton     insert     = OrdPSQ.insert     delete     = OrdPSQ.delete+    deleteMin  = OrdPSQ.deleteMin     alter      = OrdPSQ.alter     alterMin   = OrdPSQ.alterMin     fromList   = OrdPSQ.fromList@@ -136,6 +140,7 @@     singleton  = HashPSQ.singleton     insert     = HashPSQ.insert     delete     = HashPSQ.delete+    deleteMin  = HashPSQ.deleteMin     alter      = HashPSQ.alter     alterMin   = HashPSQ.alterMin     fromList   = HashPSQ.fromList
tests/Data/PSQ/Class/Tests.hs view
@@ -61,6 +61,7 @@     , testProperty "insertDelete"     (untag' prop_insertDelete)     , testProperty "insertDeleteView" (untag' prop_insertDeleteView)     , testProperty "deleteNonMember"  (untag' prop_deleteNonMember)+    , testProperty "deleteMin"        (untag' prop_deleteMin)     , testProperty "alter"            (untag' prop_alter)     , testProperty "alterMin"         (untag' prop_alterMin)     , testProperty "toList"           (untag' prop_toList)@@ -287,6 +288,21 @@ prop_deleteNonMember = Tagged $ \t ->     forAll arbitraryTestKey $ \k ->         (lookup k t == Nothing) ==> (delete k t == (t :: psq Int Char))++prop_deleteMin+    :: forall psq. (PSQ psq, TestKey (Key psq),+                    Arbitrary (psq Int Char),+                    Eq (psq Int Char),+                    Show (psq Int Char))+    => Tagged psq (psq Int Char -> Bool)+prop_deleteMin = Tagged $ \t ->+    let t' = deleteMin t+    in if null t+        then t' == t+        else case findMin t of+                Nothing        -> False+                Just (k, _, _) ->+                    size t' == size t - 1 && member k t && not (member k t')  prop_alter     :: forall psq. (PSQ psq, TestKey (Key psq),