Skip to content

Commit

Permalink
[Refactoring] Tweak 'PlutusTx.Data.AssocMap' (#6509)
Browse files Browse the repository at this point in the history
  • Loading branch information
effectfully authored Sep 23, 2024
1 parent 3d42b87 commit 7436868
Showing 1 changed file with 3 additions and 2 deletions.
5 changes: 3 additions & 2 deletions plutus-tx/src/PlutusTx/Data/AssocMap.hs
Original file line number Diff line number Diff line change
Expand Up @@ -209,11 +209,12 @@ safeFromList =
. toOpaque
. List.foldr (uncurry go) []
where
go :: k -> a -> [(BuiltinData, BuiltinData)] -> [(BuiltinData, BuiltinData)]
go k v [] = [(P.toBuiltinData k, P.toBuiltinData v)]
go k v ((k', v') : rest) =
if P.toBuiltinData k == k'
then (P.toBuiltinData k, P.toBuiltinData v) : go k v rest
else (P.toBuiltinData k', P.toBuiltinData v') : go k v rest
else (k', v') : go k v rest

{-# INLINEABLE unsafeFromList #-}
-- | Unsafely create an 'Map' from a list of pairs.
Expand All @@ -238,7 +239,7 @@ noDuplicateKeys (Map m) = go m
(\() -> True)
( \hd tl ->
let k = BI.fst hd
in if member k (Map tl) then False else go tl
in if member' k tl then False else go tl
)

{-# INLINEABLE all #-}
Expand Down

1 comment on commit 7436868

@github-actions
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Performance Alert ⚠️

Possible performance regression was detected for benchmark 'Plutus Benchmarks'.
Benchmark result of this commit is worse than the previous benchmark result exceeding threshold 1.05.

Benchmark suite Current: 7436868 Previous: 3d42b87 Ratio
validation-auction_2-4 904.2 μs 854.6 μs 1.06
validation-auction_2-5 331.1 μs 237.8 μs 1.39
validation-multisig-sm-4 564.2 μs 510.4 μs 1.11
validation-multisig-sm-5 796.7 μs 560.2 μs 1.42
validation-multisig-sm-6 565.2 μs 434 μs 1.30
validation-decode-game-sm-success_2-6 176.6 μs 159.7 μs 1.11
validation-decode-multisig-sm-6 783.3 μs 572 μs 1.37
validation-decode-multisig-sm-7 816.5 μs 568.7 μs 1.44
validation-decode-multisig-sm-8 774.7 μs 569.2 μs 1.36
validation-decode-multisig-sm-9 813.1 μs 569.8 μs 1.43
validation-decode-multisig-sm-10 817.8 μs 572 μs 1.43
validation-decode-ping-pong-1 684.3 μs 477.6 μs 1.43
validation-decode-ping-pong-2 683.8 μs 481.1 μs 1.42
validation-decode-ping-pong_2-1 684 μs 477.8 μs 1.43
validation-decode-stablecoin_2-1 1190 μs 891.7 μs 1.33
validation-decode-stablecoin_2-2 231.9 μs 194.1 μs 1.19
validation-decode-stablecoin_2-3 1195 μs 842.6 μs 1.42
validation-decode-stablecoin_2-4 228.5 μs 161.5 μs 1.41
validation-decode-token-account-1 328.2 μs 234.2 μs 1.40
validation-decode-token-account-2 300.7 μs 212.8 μs 1.41
validation-decode-uniswap-1 332 μs 293.2 μs 1.13
validation-decode-uniswap-4 252.4 μs 175.6 μs 1.44
validation-decode-uniswap-5 1029 μs 725.8 μs 1.42
validation-decode-uniswap-6 254.3 μs 195.3 μs 1.30
validation-decode-vesting-1 451.4 μs 319 μs 1.42
nofib-primetest/10digits 28180 μs 24260 μs 1.16
nofib-queens4x4/fc 19450 μs 18490 μs 1.05
marlowe-semantics/0101020201010201010200010102000201000201010102000102010201010000 432.2 μs 304.5 μs 1.42
marlowe-semantics/0101080808040600020306010000000302050807010208060100070207080202 1098 μs 766 μs 1.43
marlowe-semantics/0104010200020000040103020102020004040300030304040400010301040303 1117 μs 777.5 μs 1.44
marlowe-semantics/04000f0b04051006000e060f09080d0b090d0104050a0b0f0506070f0a070008 1063 μs 739.8 μs 1.44
marlowe-semantics/0543a00ba1f63076c1db6bf94c6ff13ae7d266dd7544678743890b0e8e1add63 1490 μs 1038 μs 1.44
marlowe-semantics/0705030002040601010206030604080208020207000101060706050502040301 1442 μs 1002.9999999999999 μs 1.44
marlowe-semantics/07070c070510030509010e050d00040907050e0a0d06030f1006030701020607 1467 μs 1033 μs 1.42
marlowe-semantics/0bcfd9487614104ec48de2ea0b2c0979866a95115748c026f9ec129384c262c4 1625 μs 1135 μs 1.43
marlowe-semantics/0be82588e4e4bf2ef428d2f44b7687bbb703031d8de696d90ec789e70d6bc1d8 1955 μs 1365 μs 1.43
marlowe-semantics/0f1d0110001b121d051e15140c0c05141d151c1f1d201c040f10091b020a0e1a 675.6 μs 473.3 μs 1.43
marlowe-semantics/119fbea4164e2bf21d2b53aa6c2c4e79414fe55e4096f5ce2e804735a7fbaf91 1090 μs 761.4 μs 1.43
marlowe-semantics/12910f24d994d451ff379b12c9d1ecdb9239c9b87e5d7bea570087ec506935d5 715.3 μs 499.1 μs 1.43
marlowe-semantics/18cefc240debc0fcab14efdd451adfd02793093efe7bc76d6322aed6ddb582ad 1079 μs 755.3 μs 1.43
marlowe-semantics/1a2f2540121f09321216090b2b1f211e3f020c2c133a1a3c3f3c232a26153a04 437.3 μs 306.8 μs 1.43
marlowe-semantics/1a573aed5c46d637919ccb5548dfc22a55c9fc38298d567d15ee9f2eea69d89e 1285 μs 902.6 μs 1.42
marlowe-semantics/1d56060c3b271226064c672a282663643b1b0823471c67737f0b076870331260 1115 μs 780.3 μs 1.43
marlowe-semantics/1d6e3c137149a440f35e0efc685b16bfb8052ebcf66ec4ad77e51c11501381c7 437.6 μs 306.3 μs 1.43
marlowe-semantics/1f0f02191604101e1f201016171604060d010d1d1c150e110a110e1006160a0d 1374 μs 958.9 μs 1.43
marlowe-semantics/202d273721330b31193405101e0637202e2a0f1140211c3e3f171e26312b0220 7933 μs 5716 μs 1.39
marlowe-semantics/21953bf8798b28df60cb459db24843fb46782b19ba72dc4951941fb4c20d2263 507.8 μs 355.7 μs 1.43
marlowe-semantics/238b21364ab5bdae3ddb514d7001c8feba128b4ddcf426852b441f9a9d02c882 431.1 μs 302.9 μs 1.42
marlowe-semantics/26e24ee631a6d927ea4fb4fac530cfd82ff7636986014de2d2aaa460ddde0bc3 808.1 μs 567.3 μs 1.42
marlowe-semantics/2797d7ac77c1b6aff8e42cf9a47fa86b1e60f22719a996871ad412cbe4de78b5 2485 μs 1750 μs 1.42
marlowe-semantics/28fdce478e179db0e38fb5f3f4105e940ece450b9ce8a0f42a6e313b752e6f2c 1323 μs 926.7 μs 1.43
marlowe-semantics/2cb21612178a2d9336b59d06cbf80488577463d209a453048a66c6eee624a695 1149 μs 795.5 μs 1.44
marlowe-semantics/2f58c9d884813042bce9cf7c66048767dff166785e8b5183c8139db2aa7312d1 1095 μs 768.8 μs 1.42
marlowe-semantics/30aa34dfbe89e0c43f569929a96c0d2b74c321d13fec0375606325eee9a34a6a 1654 μs 1163 μs 1.42
marlowe-semantics/322acde099bc34a929182d5b894214fc87ec88446e2d10625119a9d17fa3ec3d 437 μs 306.4 μs 1.43
marlowe-semantics/331e4a1bb30f28d7073c54f9a13c10ae19e2e396c299a0ce101ee6bf4b2020db 668 μs 470.4 μs 1.42
marlowe-semantics/33c3efd79d9234a78262b52bc6bbf8124cb321a467dedb278328215167eca455 898.5 μs 631.3 μs 1.42
marlowe-semantics/383683bfcecdab0f4df507f59631c702bd11a81ca3841f47f37633e8aacbb5de 1093 μs 767.7 μs 1.42
marlowe-semantics/3bb75b2e53eb13f718eacd3263ab4535f9137fabffc9de499a0de7cabb335479 431.7 μs 303.9 μs 1.42
marlowe-semantics/3db496e6cd39a8b888a89d0de07dace4397878958cab3b9d9353978b08c36d8a 1195 μs 839.2 μs 1.42
marlowe-semantics/44a9e339fa25948b48637fe7e10dcfc6d1256319a7b5ce4202cb54dfef8e37e7 432.7 μs 304 μs 1.42
marlowe-semantics/4c3efd13b6c69112a8a888372d56c86e60c232125976f29b1c3e21d9f537845c 1478 μs 1038 μs 1.42
marlowe-semantics/4d7adf91bfc93cebe95a7e054ec17cfbb912b32bd8aecb48a228b50e02b055c8 808.4 μs 705.4 μs 1.15
marlowe-semantics/a85173a832db3ea944fafc406dfe3fa3235254897d6d1d0e21bc380147687bd5 534.1 μs 373.8 μs 1.43
marlowe-semantics/a9a853b6d083551f4ed2995551af287880ef42aee239a2d9bc5314d127cce592 673.2 μs 515.3 μs 1.31
marlowe-semantics/acb9c83c2b78dabef8674319ad69ba54912cd9997bdf2d8b2998c6bfeef3b122 891.7 μs 657.8 μs 1.36
marlowe-semantics/acce04815e8fd51be93322888250060da173eccf3df3a605bd6bc6a456cde871 409.2 μs 287.6 μs 1.42
marlowe-semantics/ad6db94ed69b7161c7604568f44358e1cc11e81fea90e41afebd669e51bb60c8 839.6 μs 589.2 μs 1.42
marlowe-semantics/b21a4df3b0266ad3481a26d3e3d848aad2fcde89510b29cccce81971e38e0835 1934 μs 1365 μs 1.42
marlowe-semantics/b50170cea48ee84b80558c02b15c6df52faf884e504d2c410ad63ba46d8ca35c 1083 μs 761.8 μs 1.42
marlowe-role-payout/0201020201020000020000010201020001020200000002010200000101010100 245.1 μs 185.3 μs 1.32
marlowe-role-payout/0202010002010100020102020102020001010101020102010001010101000100 246.3 μs 172.5 μs 1.43
marlowe-role-payout/0303020000020001010201060303040208070100050401080304020801030001 244.7 μs 172.1 μs 1.42
marlowe-role-payout/031d56d71454e2c4216ffaa275c4a8b3eb631109559d0e56f44ea8489f57ba97 296.6 μs 207.4 μs 1.43
marlowe-role-payout/03d730a62332c51c7b70c16c64da72dd1c3ea36c26b41cd1a1e00d39fda3d6cc 280.8 μs 197 μs 1.43
marlowe-role-payout/0403020000030204010000030001000202010101000304030001040404030100 260 μs 182.7 μs 1.42
marlowe-role-payout/0405010105020401010304080005050800040301010800080207080704020206 284.2 μs 199.5 μs 1.42
marlowe-role-payout/041a2c3b111139201a3a2c173c392b170e16370d300f2d28342d0f2f0e182e01 286.9 μs 202.6 μs 1.42
marlowe-role-payout/04f592afc6e57c633b9c55246e7c82e87258f04e2fb910c37d8e2417e9db46e5 335.7 μs 235.8 μs 1.42
marlowe-role-payout/057ebc80922f16a5f4bf13e985bf586b8cff37a2f6fe0f3ce842178c16981027 239.3 μs 168.9 μs 1.42
marlowe-role-payout/06317060a8e488b1219c9dae427f9ce27918a9e09ee8ac424afa33ca923f7954 258.5 μs 181.4 μs 1.43
marlowe-role-payout/07658a6c898ad6d624c37df1e49e909c2e9349ba7f4c0a6be5f166fe239bfcae 233.3 μs 163.9 μs 1.42
marlowe-role-payout/0bdca1cb8fa7e38e09062557b82490714052e84e2054e913092cd84ac071b961 283.8 μs 200.6 μs 1.41
marlowe-role-payout/0c9d3634aeae7038f839a1262d1a8bc724dc77af9426459417a56ec73240f0e0 254.4 μs 178.3 μs 1.43
marlowe-role-payout/1a20b465d48a585ffd622bd8dc26a498a3c12f930ab4feab3a5064cfb3bc536a 268.5 μs 206.6 μs 1.30
marlowe-role-payout/211e1b6c10260c4620074d2e372c260d38643a3d605f63772524034f0a4a7632 255.5 μs 178.7 μs 1.43
marlowe-role-payout/21a1426fb3fb3019d5dc93f210152e90b0a6e740ef509b1cdd423395f010e0ca 270.8 μs 193.9 μs 1.40
marlowe-role-payout/224ce46046fab9a17be4197622825f45cc0c59a6bd1604405148e43768c487ef 245.4 μs 172.3 μs 1.42
marlowe-role-payout/332c2b1c11383d1b373e1315201f1128010e0e1518332f273f141b23243f2a07 234.4 μs 164.5 μs 1.42
marlowe-role-payout/3565ee025317e065e8555eef288080276716366769aad89e03389f5ec4ce26d7 260.6 μs 182.5 μs 1.43
marlowe-role-payout/3569299fc986f5354d02e627a9eaa48ab46d5af52722307a0af72bae87e256dc 241.1 μs 169.1 μs 1.43
marlowe-role-payout/36866914aa07cf62ef36cf2cd64c7f240e3371e27bb9fff5464301678e809c40 240.5 μs 169 μs 1.42
marlowe-role-payout/371c10d2526fc0f09dbe9ed59e44dcd949270b27dc42035addd7ff9f7e0d05e7 288.1 μs 211.2 μs 1.36
marlowe-role-payout/3897ef714bba3e6821495b706c75f8d64264c3fdaa58a3826c808b5a768c303d 248.3 μs 175.1 μs 1.42
marlowe-role-payout/4121d88f14387d33ac5e1329618068e3848445cdd66b29e5ba382be2e02a174a 288.9 μs 202.6 μs 1.43
marlowe-role-payout/4299c7fcf093a5dbfe114c188e32ca199b571a7c25cb7f766bf49f12dab308be 265.3 μs 186.3 μs 1.42
marlowe-role-payout/452e17d16222a427707fa83f63ffb79f606cc25c755a18b1e3274c964ed5ec99 295.2 μs 207.7 μs 1.42
marlowe-role-payout/46f8d00030436e4da490a86b331fa6c3251425fb8c19556080e124d75bad7bd6 241.9 μs 169.7 μs 1.43
marlowe-role-payout/47364cfaf2c00f7d633283dce6cf84e4fd4e8228c0a0aa50e7c55f35c3ecaa1c 242.3 μs 170 μs 1.43
marlowe-role-payout/49b8275d0cb817be40865694ab05e3cfe5fc35fb43b78e7de68c1f3519b536bd 250.1 μs 176.4 μs 1.42
marlowe-role-payout/4dd7755b6ca1f0c9747c1fc0ee4da799f6f1c07108e980bd9f820911ad711ff2 323.8 μs 227.2 μs 1.43
marlowe-role-payout/4fbcfdb577a56b842d6f6938187a783f71d9da7519353e3da3ef0c564e1eb344 299.2 μs 211.2 μs 1.42
marlowe-role-payout/5a0725d49c733130eda8bc6ed5234f7f6ff8c9dd2d201e8806125e5fbcc081f9 254.9 μs 179.4 μs 1.42
marlowe-role-payout/5a2aae344e569a2c644dd9fa8c7b1f129850937eb562b7748c275f9e40bed596 241.6 μs 169.7 μs 1.42
marlowe-role-payout/5ade103e9530dd0d572fe1b053ea65ad925c6ebbe321e873ace8b804363fa82c 338 μs 237.1 μs 1.43
marlowe-role-payout/5d4c62a0671c65a14f6a15093e3efc4f1816d95a5a58fd92486bedaae8d9526b 283.2 μs 198.7 μs 1.43
marlowe-role-payout/5efe992e306e31cc857c64a62436ad2f9325acc5b4a74a8cebccdfd853ce63d2 248 μs 178.2 μs 1.39
marlowe-role-payout/a0fba5740174b5cd24036c8b008cb1efde73f1edae097b9325c6117a0ff40d3b 268.2 μs 188.7 μs 1.42
marlowe-role-payout/a1b25347409c3993feca1a60b6fcaf93d1d4bbaae19ab06fdf50cedc26cee68d 233 μs 163.6 μs 1.42
marlowe-role-payout/a27524cfad019df45e4e8316f927346d4cc39da6bdd294fb2c33c3f58e6a8994 243.6 μs 169.9 μs 1.43
marlowe-role-payout/a6664a2d2a82f370a34a36a45234f6b33120a39372331678a3b3690312560ce9 294.5 μs 206.5 μs 1.43
marlowe-role-payout/a6f064b83b31032ea7f25921364727224707268e472a569f584cc6b1d8c017e8 242.7 μs 169.6 μs 1.43
marlowe-role-payout/a7cb09f417c3f089619fe25b7624392026382b458486129efcff18f8912bf302 242.2 μs 169.8 μs 1.43
marlowe-role-payout/a92b4072cb8601fa697e1150c08463b14ffced54eb963df08d322216e27373cb 242.8 μs 170.3 μs 1.43
marlowe-role-payout/af2e072b5adfaa7211e0b341e1f7319c4f4e7364a4247c9247132a927e914753 289.5 μs 202.4 μs 1.43
marlowe-role-payout/b43564af5f13cc5208b92b1ad6d45369446f378d3891e5cb3e353b30d4f3fb10 242.3 μs 205.8 μs 1.18

This comment was automatically generated by workflow using github-action-benchmark.

CC: @IntersectMBO/plutus-core

Please sign in to comment.