diff --git a/tests/MA/Algorithm/SplitSpec.hs b/tests/MA/Algorithm/SplitSpec.hs index 388d4bf6cbf6fc185ad533974addaa4cfb3790d6..59799ef74208c797879c2b29b3f089f593c8c733 100644 --- a/tests/MA/Algorithm/SplitSpec.hs +++ b/tests/MA/Algorithm/SplitSpec.hs @@ -31,6 +31,8 @@ spec = do collectTouchedBlocksSpec updateBlockSpec splitBlockSpec + addBlocksToQueueSpec + collectTouchedBlocksSpec :: Spec collectTouchedBlocksSpec = describe "collectTouchedBlocks" $ do @@ -197,6 +199,32 @@ splitBlockSpec = describe "splitBlock" $ do in res `shouldMatchList` [Block 0, Block 2] +addBlocksToQueueSpec :: Spec +addBlocksToQueueSpec = describe "addBlocksToQueue" $ do + it "doesn't add the largest block to the queue" + $ let res = + withState @(MonoidValued Int) + (enc [1, 1, 2, 3] [(0, 1, 0), (1, 1, 1), (2, 2, 2), (3, 3, 3)]) + $ do + lift . Queue.clear =<< view _2 + addBlocksToQueue (Block 0) (map Block [0, 1, 2]) + q <- lift . Queue.toList =<< view _2 + p <- view (_1 . partitionL) + lift $ forM q $ \b -> Partition.blockSize p b + in res `shouldMatchList` ([1, 1]) + + it "does add all new blocks, if the original was already queued" + $ let res = + withState @(MonoidValued Int) + (enc [1, 1, 2, 3] [(0, 1, 0), (1, 1, 1), (2, 2, 2), (3, 3, 3)]) + $ do + queue <- view _2 + lift (Queue.clear queue) + lift (Queue.enqueue queue (Block 0)) + addBlocksToQueue (Block 0) (map Block [0, 1, 2]) + lift (Queue.toList queue) + in res `shouldMatchList` (map Block [0, 1, 2]) + withState :: RefinementInterface h