CI4OPKQMU4CIX3QPGA5GWSEOPJ2FAREDBVU6X33E7X3EEQXAICRQC U7YAT2ZK6GMS7KVFFEQTDRFX6GIN7HVHNWGKIFDGJGE2G2IXSF6QC M4PWY5RUV72AEDCNC4O7UKBPHBIACR4354YTSC3SUZGWFV5UBJBQC IR75ZMX32SFFMDNV2I2L22X5JTWCOC4UUBCSPU7S6VHR6HFV6ADQC NVOCQVASZWTKQJG7GPH7KHKZZR7NUG4WLV5YY4KAIRPCJRWCZPIAC X3ES7NUA42D2BF7CQDDKXM5CLMVCYA3H5YU5KXLPTGDBFPE2LNVAC RPAJLHMTUJU4AYNBOHVGHGGB4NY2NLY3BVPYN5FMWB3ZIMAUQHCQC KNSI575VAW6HRCZYXOEPQ4DTSML4EORML5MV4DJBRKE7TXCPS4EAC 64C6AWH66FDKU6UE6Z6JPX2J2GBM2JOPTH2GL6LHKAIUBGNGDZ5AC 7KZP4RHZ3QSYTPPQ257A65Z5UPX44TF2LAI2U5EMULQCLDCEUK2AC NEDDHXUK3GNFMOFO3KLU7NRIHCTYNWBT3D6HTKZAOXFDE6HMDZ6AC EMVTF2IWNQGRL44FC4JNG5FYYQTZSFPNM6SOM7IAEH6T7PPK2NVAC LHJ2HFXVUQ4VG25I7DADWU73G5K5WNZBDQ3SVNKFYLZ5BEYM4XCQC 5DRIWGLUKMQZU2ZPBXSTLAWJKAMOD5YXAHM5LEDQHDFGYYLHWCDQC LTSVBVA235BQAIU3SQURKSRHIAL33K47G4J6TSEP2K353OCHNJEAC SCXG6TJWYIPRUMT27KGKIIF6FYKTUTY74UNZ2FQTT63XZ6HIF3AAC EFSXYZPOGA5M4DN65IEIDO7JK6U34DMQELAPHOIL2UAT6HRC66BAC NMWWP4ZNOKHZKSJ6F5KYEREWXXR5F4UD35WOKI3EH42AZWVCTCJAC in workIndex logEntries`shouldBe` (WorkIndex $ fmap (L.reverse . L.sort) widx')
expected = (WorkIndex $ fmap (L.reverse . L.sort) widx')actual = view eventTime <$> workIndex id logEntriesin actual `shouldBe` expectedit "computes correct work shares" $ do[u0, u1, u2] <- fmap CreditToUser . take 3 <$> sample' (UserId <$> genUUID)let initTime = toThyme . fromJust $ parseISO8601 "2014-01-01T00:08:00Z"len = fromInteger @NominalDiffTime 360timestamps = iterate (addUTCTime len) initTimeintervals =fmap (uncurry I.Interval . snd). filter (\i -> fst i `mod` 2 == 0)$ ([(0 :: Int)..] `zip` (timestamps `zip` tail timestamps))widx = WorkIndex $ M.fromList[ (u0, L.fromList $ take 10 intervals), (u1, L.fromList $ take 30 intervals), (u2, L.fromList $ take 120 intervals)]-- for this test we'll be entirely within undepreciated perioddepf = toDepF $ LinearDepreciation 180 1800evalTime = I._start . head $ drop 120 intervals
shares = payouts depf evalTime widx(shares ^. loggedTotal `shouldBe` (fromInteger @NominalDiffTime (360 * 160)))(shares ^. creditToShares . to (fromJust . M.lookup u0) . wsShare) `shouldBe` (10 % 160)(shares ^. creditToShares . to (fromJust . M.lookup u1) . wsShare) `shouldBe` (30 % 160)(shares ^. creditToShares . to (fromJust . M.lookup u2) . wsShare) `shouldBe` (120 % 160)