From 3db7fcfba533cbf02ad0343c3a1fefb164e99fa6 Mon Sep 17 00:00:00 2001 From: Trolli Schmittlauch Date: Tue, 14 Apr 2020 00:45:25 +0200 Subject: [PATCH] found an edge case where a Data.Map tree map does not work properly for retrieving a successor. Need to find a better data structure --- Hash2Pub/src/CacheEdgeCases.hs | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 Hash2Pub/src/CacheEdgeCases.hs diff --git a/Hash2Pub/src/CacheEdgeCases.hs b/Hash2Pub/src/CacheEdgeCases.hs new file mode 100644 index 0000000..77d0d5d --- /dev/null +++ b/Hash2Pub/src/CacheEdgeCases.hs @@ -0,0 +1,29 @@ +import Hash2Pub.FediChord +import Data.Map.Internal.Debug (showTree) +import qualified Data.Map.Strict as Map + +giebMalCache :: [Integer] -> Map.Map NodeID () +giebMalCache = Map.fromList . map (mkCacheEntry . fromInteger) + where + mkCacheEntry nodeid = (nodeid, ()) + +testCache1 = giebMalCache [1, -1, 2^50] +testFirstHalf = giebMalCache [3, 2^254-2, 2^255] +testOverlap = giebMalCache [2^255+2^254+3, 2, 2^253] + +nidLookup m = flip Map.lookup m . fromInteger +nidLookupLT m = flip Map.lookupLT m . fromInteger +nidLookupGT m = flip Map.lookupGT m . fromInteger + +edgeCase1 :: IO () +edgeCase1 = do + putStrLn "Let there be a Map with the keys [2^255+2^254+3, 2, 2^253], all keys are NodeIDs mod 2^256." + print testOverlap + putStrLn "\nWhile (NodeID 2^255+2^254+3) > (NodeID 2^254 + 14) …" + print $ toNodeID (2^255+2^254+3) > toNodeID (2^254+14) + putStrLn "… and 2^255+2^254+3 is an element of the map…" + print $ Map.member (fromInteger 2^255+2^254+3) testOverlap + putStrLn "… looking for an element larger than 2^254 + 14 doesn't yield any." + print $ nidLookupGT testOverlap (2^254+14) + putStrLn "\nThat's the tree of the map:" + putStrLn $ showTree testOverlap