onflow / cadence

Cadence, the resource-oriented smart contract programming language 🏃‍♂️
https://developers.flow.com/cadence
Apache License 2.0
532 stars 139 forks source link

Port predicate func from PR 3300 to feature/atree-register-inlining-v0.42 #3394

Closed fxamacker closed 3 months ago

fxamacker commented 3 months ago

This PR ports PR #3300 by @turbolent, plus some adjustments for Cadence 0.42.

Currently, Cadence 0.42 + atree inlining migration fixes all detected broken data, instead of using this predicate function.

Predicate function is used by atree's FixLoadedBrokenReferences to limit broken data to be fixed. This function is needed for Cadence 0.42 + atree inlining migration since atree inlining migration runs first and is responsible for fixing broken testnet data.

Specifically, flow-go was calling atree's FixLoadedBrokenReferences with the default predicate function, so it was fixing all broken data. By passing the ported predicate function to atree, the migration will only fix broken data allowed by the predicate func.

See fix_broken_data_migration.go#L92-L95


github-actions[bot] commented 3 months ago

Cadence Benchstat comparison

This branch with compared with the base branch onflow:feature/atree-register-inlining-v0.42 commit 9615ee9377199e45ce5546c3b252247fb9035b50 The command for i in {1..N}; do go test ./... -run=XXX -bench=. -benchmem -shuffle=on; done was used. Bench tests were run a total of 7 times on each branch.

Collapsed results for better readability

old.txtnew.txt
time/opdelta
CheckContractInterfaceFungibleTokenConformance-483.3µs ± 0%82.3µs ± 0%~(p=1.000 n=1+1)
ContractInterfaceFungibleToken-428.0µs ± 0%27.7µs ± 0%~(p=1.000 n=1+1)
DecodeBatchEventsCCF-4116ms ± 0%116ms ± 0%~(p=1.000 n=1+1)
DecodeBatchEventsJSON-4382ms ± 0%382ms ± 0%~(p=1.000 n=1+1)
DecodeCCF/FlowFees.FeesDeducted-42.43µs ± 0%2.44µs ± 0%~(p=1.000 n=1+1)
DecodeCCF/FlowFees.TokensWithdrawn-41.96µs ± 0%1.96µs ± 0%~(p=1.000 n=1+1)
DecodeCCF/FlowIDTableStaking.DelegatorRewardsPaid-42.51µs ± 0%2.55µs ± 0%~(p=1.000 n=1+1)
DecodeCCF/FlowIDTableStaking.EpochTotalRewardsPaid-42.63µs ± 0%2.62µs ± 0%~(p=1.000 n=1+1)
DecodeCCF/FlowIDTableStaking.NewWeeklyPayout-41.97µs ± 0%1.97µs ± 0%~(p=1.000 n=1+1)
DecodeCCF/FlowIDTableStaking.RewardsPaid-42.30µs ± 0%2.29µs ± 0%~(p=1.000 n=1+1)
DecodeCCF/FlowToken.TokensDeposited-42.33µs ± 0%2.32µs ± 0%~(p=1.000 n=1+1)
DecodeCCF/FlowToken.TokensDeposited_with_nil_receiver-42.27µs ± 0%2.25µs ± 0%~(p=1.000 n=1+1)
DecodeCCF/FlowToken.TokensMinted-41.95µs ± 0%1.95µs ± 0%~(p=1.000 n=1+1)
DecodeCCF/FlowToken.TokensWithdrawn-42.34µs ± 0%2.35µs ± 0%~(p=1.000 n=1+1)
DecodeJSON/FlowFees.FeesDeducted-49.45µs ± 0%9.46µs ± 0%~(p=1.000 n=1+1)
DecodeJSON/FlowFees.TokensWithdrawn-45.61µs ± 0%5.52µs ± 0%~(p=1.000 n=1+1)
DecodeJSON/FlowIDTableStaking.DelegatorRewardsPaid-48.55µs ± 0%8.65µs ± 0%~(p=1.000 n=1+1)
DecodeJSON/FlowIDTableStaking.EpochTotalRewardsPaid-411.7µs ± 0%11.7µs ± 0%~(p=1.000 n=1+1)
DecodeJSON/FlowIDTableStaking.NewWeeklyPayout-45.64µs ± 0%5.63µs ± 0%~(p=1.000 n=1+1)
DecodeJSON/FlowIDTableStaking.RewardsPaid-47.29µs ± 0%7.26µs ± 0%~(p=1.000 n=1+1)
DecodeJSON/FlowToken.TokensDeposited-47.69µs ± 0%7.61µs ± 0%~(p=1.000 n=1+1)
DecodeJSON/FlowToken.TokensDeposited_with_nil_receiver-46.91µs ± 0%6.98µs ± 0%~(p=1.000 n=1+1)
DecodeJSON/FlowToken.TokensMinted-45.59µs ± 0%5.59µs ± 0%~(all equal)
DecodeJSON/FlowToken.TokensWithdrawn-47.58µs ± 0%7.58µs ± 0%~(p=1.000 n=1+1)
EncodeBatchEventsCCF-4198ms ± 0%59ms ± 0%~(p=1.000 n=1+1)
EncodeBatchEventsJSON-497.6ms ± 0%98.8ms ± 0%~(p=1.000 n=1+1)
EncodeCCF/FlowFees.FeesDeducted-41.26µs ± 0%1.22µs ± 0%~(p=1.000 n=1+1)
EncodeCCF/FlowFees.TokensWithdrawn-4995ns ± 0%992ns ± 0%~(p=1.000 n=1+1)
EncodeCCF/FlowIDTableStaking.DelegatorRewardsPaid-41.22µs ± 0%1.23µs ± 0%~(p=1.000 n=1+1)
EncodeCCF/FlowIDTableStaking.EpochTotalRewardsPaid-41.33µs ± 0%1.33µs ± 0%~(p=1.000 n=1+1)
EncodeCCF/FlowIDTableStaking.NewWeeklyPayout-41.00µs ± 0%1.00µs ± 0%~(p=1.000 n=1+1)
EncodeCCF/FlowIDTableStaking.RewardsPaid-41.12µs ± 0%1.12µs ± 0%~(p=1.000 n=1+1)
EncodeCCF/FlowToken.TokensDeposited-41.21µs ± 0%1.21µs ± 0%~(p=1.000 n=1+1)
EncodeCCF/FlowToken.TokensDeposited_with_nil_receiver-41.18µs ± 0%1.18µs ± 0%~(p=1.000 n=1+1)
EncodeCCF/FlowToken.TokensMinted-4995ns ± 0%996ns ± 0%~(p=1.000 n=1+1)
EncodeCCF/FlowToken.TokensWithdrawn-41.22µs ± 0%1.22µs ± 0%~(p=1.000 n=1+1)
EncodeJSON/FlowFees.FeesDeducted-42.34µs ± 0%2.35µs ± 0%~(p=1.000 n=1+1)
EncodeJSON/FlowFees.TokensWithdrawn-41.33µs ± 0%1.29µs ± 0%~(p=1.000 n=1+1)
EncodeJSON/FlowIDTableStaking.DelegatorRewardsPaid-42.12µs ± 0%2.08µs ± 0%~(p=1.000 n=1+1)
EncodeJSON/FlowIDTableStaking.EpochTotalRewardsPaid-42.95µs ± 0%3.09µs ± 0%~(p=1.000 n=1+1)
EncodeJSON/FlowIDTableStaking.NewWeeklyPayout-41.31µs ± 0%1.33µs ± 0%~(p=1.000 n=1+1)
EncodeJSON/FlowIDTableStaking.RewardsPaid-41.73µs ± 0%1.74µs ± 0%~(p=1.000 n=1+1)
EncodeJSON/FlowToken.TokensDeposited-41.99µs ± 0%2.03µs ± 0%~(p=1.000 n=1+1)
EncodeJSON/FlowToken.TokensDeposited_with_nil_receiver-41.57µs ± 0%1.58µs ± 0%~(p=1.000 n=1+1)
EncodeJSON/FlowToken.TokensMinted-41.30µs ± 0%1.32µs ± 0%~(p=1.000 n=1+1)
EncodeJSON/FlowToken.TokensWithdrawn-41.98µs ± 0%2.00µs ± 0%~(p=1.000 n=1+1)
ExportType/composite_type-4216ns ± 0%215ns ± 0%~(p=1.000 n=1+1)
ExportType/simple_type-468.8ns ± 0%68.7ns ± 0%~(p=1.000 n=1+1)
InterpretRecursionFib-41.90ms ± 0%1.90ms ± 0%~(p=1.000 n=1+1)
NewInterpreter/new_interpreter-4945ns ± 0%952ns ± 0%~(p=1.000 n=1+1)
NewInterpreter/new_sub-interpreter-4454ns ± 0%515ns ± 0%~(p=1.000 n=1+1)
ParseArray-45.88ms ± 0%6.00ms ± 0%~(p=1.000 n=1+1)
ParseDeploy/byte_array-48.71ms ± 0%8.73ms ± 0%~(p=1.000 n=1+1)
ParseDeploy/decode_hex-41.03ms ± 0%1.03ms ± 0%~(p=1.000 n=1+1)
ParseFungibleToken/With_memory_metering-4143µs ± 0%144µs ± 0%~(p=1.000 n=1+1)
ParseFungibleToken/Without_memory_metering-4113µs ± 0%113µs ± 0%~(p=1.000 n=1+1)
ParseInfix-45.19µs ± 0%5.23µs ± 0%~(p=1.000 n=1+1)
QualifiedIdentifierCreation/One_level-42.48ns ± 0%2.48ns ± 0%~(p=1.000 n=1+1)
QualifiedIdentifierCreation/Three_levels-483.4ns ± 0%84.4ns ± 0%~(p=1.000 n=1+1)
RuntimeResourceDictionaryValues-41.85ms ± 0%1.87ms ± 0%~(p=1.000 n=1+1)
RuntimeScriptNoop-43.57µs ± 0%3.58µs ± 0%~(p=1.000 n=1+1)
SuperTypeInference/arrays-4238ns ± 0%238ns ± 0%~(p=1.000 n=1+1)
SuperTypeInference/composites-487.1ns ± 0%90.0ns ± 0%~(p=1.000 n=1+1)
SuperTypeInference/integers-4136ns ± 0%132ns ± 0%~(p=1.000 n=1+1)
ValueIsSubtypeOfSemaType-469.2ns ± 0%70.5ns ± 0%~(p=1.000 n=1+1)
 
alloc/opdelta
CheckContractInterfaceFungibleTokenConformance-449.2kB ± 0%49.3kB ± 0%~(p=1.000 n=1+1)
ContractInterfaceFungibleToken-423.4kB ± 0%23.4kB ± 0%~(all equal)
DecodeBatchEventsCCF-467.4MB ± 0%67.4MB ± 0%~(p=1.000 n=1+1)
DecodeBatchEventsJSON-4246MB ± 0%246MB ± 0%~(p=1.000 n=1+1)
DecodeCCF/FlowFees.FeesDeducted-41.41kB ± 0%1.41kB ± 0%~(all equal)
DecodeCCF/FlowFees.TokensWithdrawn-41.22kB ± 0%1.22kB ± 0%~(all equal)
DecodeCCF/FlowIDTableStaking.DelegatorRewardsPaid-41.49kB ± 0%1.49kB ± 0%~(all equal)
DecodeCCF/FlowIDTableStaking.EpochTotalRewardsPaid-41.50kB ± 0%1.50kB ± 0%~(all equal)
DecodeCCF/FlowIDTableStaking.NewWeeklyPayout-41.26kB ± 0%1.26kB ± 0%~(all equal)
DecodeCCF/FlowIDTableStaking.RewardsPaid-41.38kB ± 0%1.38kB ± 0%~(all equal)
DecodeCCF/FlowToken.TokensDeposited-41.34kB ± 0%1.34kB ± 0%~(all equal)
DecodeCCF/FlowToken.TokensDeposited_with_nil_receiver-41.33kB ± 0%1.33kB ± 0%~(all equal)
DecodeCCF/FlowToken.TokensMinted-41.22kB ± 0%1.22kB ± 0%~(all equal)
DecodeCCF/FlowToken.TokensWithdrawn-41.35kB ± 0%1.35kB ± 0%~(all equal)
DecodeJSON/FlowFees.FeesDeducted-46.02kB ± 0%6.02kB ± 0%~(all equal)
DecodeJSON/FlowFees.TokensWithdrawn-43.62kB ± 0%3.62kB ± 0%~(all equal)
DecodeJSON/FlowIDTableStaking.DelegatorRewardsPaid-45.45kB ± 0%5.45kB ± 0%~(all equal)
DecodeJSON/FlowIDTableStaking.EpochTotalRewardsPaid-47.37kB ± 0%7.37kB ± 0%~(all equal)
DecodeJSON/FlowIDTableStaking.NewWeeklyPayout-43.66kB ± 0%3.66kB ± 0%~(all equal)
DecodeJSON/FlowIDTableStaking.RewardsPaid-44.55kB ± 0%4.55kB ± 0%~(all equal)
DecodeJSON/FlowToken.TokensDeposited-44.91kB ± 0%4.91kB ± 0%~(all equal)
DecodeJSON/FlowToken.TokensDeposited_with_nil_receiver-44.49kB ± 0%4.49kB ± 0%~(p=1.000 n=1+1)
DecodeJSON/FlowToken.TokensMinted-43.62kB ± 0%3.62kB ± 0%~(all equal)
DecodeJSON/FlowToken.TokensWithdrawn-44.91kB ± 0%4.91kB ± 0%~(all equal)
EncodeBatchEventsCCF-437.1MB ± 0%37.1MB ± 0%~(p=1.000 n=1+1)
EncodeBatchEventsJSON-434.0MB ± 0%34.0MB ± 0%~(p=1.000 n=1+1)
EncodeCCF/FlowFees.FeesDeducted-4736B ± 0%736B ± 0%~(all equal)
EncodeCCF/FlowFees.TokensWithdrawn-4688B ± 0%688B ± 0%~(all equal)
EncodeCCF/FlowIDTableStaking.DelegatorRewardsPaid-4800B ± 0%800B ± 0%~(all equal)
EncodeCCF/FlowIDTableStaking.EpochTotalRewardsPaid-4768B ± 0%768B ± 0%~(all equal)
EncodeCCF/FlowIDTableStaking.NewWeeklyPayout-4704B ± 0%704B ± 0%~(all equal)
EncodeCCF/FlowIDTableStaking.RewardsPaid-4784B ± 0%784B ± 0%~(all equal)
EncodeCCF/FlowToken.TokensDeposited-4752B ± 0%752B ± 0%~(all equal)
EncodeCCF/FlowToken.TokensDeposited_with_nil_receiver-4736B ± 0%736B ± 0%~(all equal)
EncodeCCF/FlowToken.TokensMinted-4688B ± 0%688B ± 0%~(all equal)
EncodeCCF/FlowToken.TokensWithdrawn-4752B ± 0%752B ± 0%~(all equal)
EncodeJSON/FlowFees.FeesDeducted-4768B ± 0%768B ± 0%~(all equal)
EncodeJSON/FlowFees.TokensWithdrawn-4408B ± 0%408B ± 0%~(all equal)
EncodeJSON/FlowIDTableStaking.DelegatorRewardsPaid-4760B ± 0%760B ± 0%~(all equal)
EncodeJSON/FlowIDTableStaking.EpochTotalRewardsPaid-4952B ± 0%952B ± 0%~(all equal)
EncodeJSON/FlowIDTableStaking.NewWeeklyPayout-4424B ± 0%424B ± 0%~(all equal)
EncodeJSON/FlowIDTableStaking.RewardsPaid-4624B ± 0%624B ± 0%~(all equal)
EncodeJSON/FlowToken.TokensDeposited-4680B ± 0%680B ± 0%~(all equal)
EncodeJSON/FlowToken.TokensDeposited_with_nil_receiver-4544B ± 0%544B ± 0%~(all equal)
EncodeJSON/FlowToken.TokensMinted-4416B ± 0%416B ± 0%~(all equal)
EncodeJSON/FlowToken.TokensWithdrawn-4672B ± 0%672B ± 0%~(all equal)
ExportType/composite_type-4136B ± 0%136B ± 0%~(all equal)
ExportType/simple_type-40.00B 0.00B ~(all equal)
InterpretRecursionFib-41.00MB ± 0%1.00MB ± 0%~(p=1.000 n=1+1)
NewInterpreter/new_interpreter-4976B ± 0%976B ± 0%~(all equal)
NewInterpreter/new_sub-interpreter-4200B ± 0%200B ± 0%~(all equal)
ParseArray-42.65MB ± 0%2.71MB ± 0%~(p=1.000 n=1+1)
ParseDeploy/byte_array-44.09MB ± 0%4.09MB ± 0%~(p=1.000 n=1+1)
ParseDeploy/decode_hex-4214kB ± 0%214kB ± 0%~(p=1.000 n=1+1)
ParseFungibleToken/With_memory_metering-428.9kB ± 0%28.9kB ± 0%~(p=1.000 n=1+1)
ParseFungibleToken/Without_memory_metering-428.9kB ± 0%28.9kB ± 0%~(p=1.000 n=1+1)
ParseInfix-41.92kB ± 0%1.92kB ± 0%~(p=1.000 n=1+1)
QualifiedIdentifierCreation/One_level-40.00B 0.00B ~(all equal)
QualifiedIdentifierCreation/Three_levels-464.0B ± 0%64.0B ± 0%~(all equal)
RuntimeResourceDictionaryValues-41.26MB ± 0%1.26MB ± 0%~(p=1.000 n=1+1)
RuntimeScriptNoop-43.02kB ± 0%3.02kB ± 0%~(all equal)
SuperTypeInference/arrays-496.0B ± 0%96.0B ± 0%~(all equal)
SuperTypeInference/composites-40.00B 0.00B ~(all equal)
SuperTypeInference/integers-40.00B 0.00B ~(all equal)
ValueIsSubtypeOfSemaType-448.0B ± 0%48.0B ± 0%~(all equal)
 
allocs/opdelta
CheckContractInterfaceFungibleTokenConformance-4811 ± 0%811 ± 0%~(all equal)
ContractInterfaceFungibleToken-4370 ± 0%370 ± 0%~(all equal)
DecodeBatchEventsCCF-41.48M ± 0%1.48M ± 0%~(all equal)
DecodeBatchEventsJSON-44.70M ± 0%4.70M ± 0%~(p=1.000 n=1+1)
DecodeCCF/FlowFees.FeesDeducted-430.0 ± 0%30.0 ± 0%~(all equal)
DecodeCCF/FlowFees.TokensWithdrawn-426.0 ± 0%26.0 ± 0%~(all equal)
DecodeCCF/FlowIDTableStaking.DelegatorRewardsPaid-430.0 ± 0%30.0 ± 0%~(all equal)
DecodeCCF/FlowIDTableStaking.EpochTotalRewardsPaid-432.0 ± 0%32.0 ± 0%~(all equal)
DecodeCCF/FlowIDTableStaking.NewWeeklyPayout-426.0 ± 0%26.0 ± 0%~(all equal)
DecodeCCF/FlowIDTableStaking.RewardsPaid-429.0 ± 0%29.0 ± 0%~(all equal)
DecodeCCF/FlowToken.TokensDeposited-431.0 ± 0%31.0 ± 0%~(all equal)
DecodeCCF/FlowToken.TokensDeposited_with_nil_receiver-429.0 ± 0%29.0 ± 0%~(all equal)
DecodeCCF/FlowToken.TokensMinted-426.0 ± 0%26.0 ± 0%~(all equal)
DecodeCCF/FlowToken.TokensWithdrawn-431.0 ± 0%31.0 ± 0%~(all equal)
DecodeJSON/FlowFees.FeesDeducted-4126 ± 0%126 ± 0%~(all equal)
DecodeJSON/FlowFees.TokensWithdrawn-471.0 ± 0%71.0 ± 0%~(all equal)
DecodeJSON/FlowIDTableStaking.DelegatorRewardsPaid-4102 ± 0%102 ± 0%~(all equal)
DecodeJSON/FlowIDTableStaking.EpochTotalRewardsPaid-4159 ± 0%159 ± 0%~(all equal)
DecodeJSON/FlowIDTableStaking.NewWeeklyPayout-470.0 ± 0%70.0 ± 0%~(all equal)
DecodeJSON/FlowIDTableStaking.RewardsPaid-487.0 ± 0%87.0 ± 0%~(all equal)
DecodeJSON/FlowToken.TokensDeposited-495.0 ± 0%95.0 ± 0%~(all equal)
DecodeJSON/FlowToken.TokensDeposited_with_nil_receiver-486.0 ± 0%86.0 ± 0%~(all equal)
DecodeJSON/FlowToken.TokensMinted-471.0 ± 0%71.0 ± 0%~(all equal)
DecodeJSON/FlowToken.TokensWithdrawn-495.0 ± 0%95.0 ± 0%~(all equal)
EncodeBatchEventsCCF-4467k ± 0%467k ± 0%~(p=1.000 n=1+1)
EncodeBatchEventsJSON-4757k ± 0%757k ± 0%~(p=1.000 n=1+1)
EncodeCCF/FlowFees.FeesDeducted-49.00 ± 0%9.00 ± 0%~(all equal)
EncodeCCF/FlowFees.TokensWithdrawn-49.00 ± 0%9.00 ± 0%~(all equal)
EncodeCCF/FlowIDTableStaking.DelegatorRewardsPaid-49.00 ± 0%9.00 ± 0%~(all equal)
EncodeCCF/FlowIDTableStaking.EpochTotalRewardsPaid-49.00 ± 0%9.00 ± 0%~(all equal)
EncodeCCF/FlowIDTableStaking.NewWeeklyPayout-49.00 ± 0%9.00 ± 0%~(all equal)
EncodeCCF/FlowIDTableStaking.RewardsPaid-49.00 ± 0%9.00 ± 0%~(all equal)
EncodeCCF/FlowToken.TokensDeposited-410.0 ± 0%10.0 ± 0%~(all equal)
EncodeCCF/FlowToken.TokensDeposited_with_nil_receiver-410.0 ± 0%10.0 ± 0%~(all equal)
EncodeCCF/FlowToken.TokensMinted-49.00 ± 0%9.00 ± 0%~(all equal)
EncodeCCF/FlowToken.TokensWithdrawn-410.0 ± 0%10.0 ± 0%~(all equal)
EncodeJSON/FlowFees.FeesDeducted-417.0 ± 0%17.0 ± 0%~(all equal)
EncodeJSON/FlowFees.TokensWithdrawn-410.0 ± 0%10.0 ± 0%~(all equal)
EncodeJSON/FlowIDTableStaking.DelegatorRewardsPaid-414.0 ± 0%14.0 ± 0%~(all equal)
EncodeJSON/FlowIDTableStaking.EpochTotalRewardsPaid-423.0 ± 0%23.0 ± 0%~(all equal)
EncodeJSON/FlowIDTableStaking.NewWeeklyPayout-410.0 ± 0%10.0 ± 0%~(all equal)
EncodeJSON/FlowIDTableStaking.RewardsPaid-413.0 ± 0%13.0 ± 0%~(all equal)
EncodeJSON/FlowToken.TokensDeposited-417.0 ± 0%17.0 ± 0%~(all equal)
EncodeJSON/FlowToken.TokensDeposited_with_nil_receiver-412.0 ± 0%12.0 ± 0%~(all equal)
EncodeJSON/FlowToken.TokensMinted-411.0 ± 0%11.0 ± 0%~(all equal)
EncodeJSON/FlowToken.TokensWithdrawn-416.0 ± 0%16.0 ± 0%~(all equal)
ExportType/composite_type-43.00 ± 0%3.00 ± 0%~(all equal)
ExportType/simple_type-40.00 0.00 ~(all equal)
InterpretRecursionFib-418.9k ± 0%18.9k ± 0%~(all equal)
NewInterpreter/new_interpreter-416.0 ± 0%16.0 ± 0%~(all equal)
NewInterpreter/new_sub-interpreter-44.00 ± 0%4.00 ± 0%~(all equal)
ParseArray-459.6k ± 0%59.6k ± 0%~(p=1.000 n=1+1)
ParseDeploy/byte_array-489.4k ± 0%89.4k ± 0%~(p=1.000 n=1+1)
ParseDeploy/decode_hex-463.0 ± 0%63.0 ± 0%~(all equal)
ParseFungibleToken/With_memory_metering-4768 ± 0%768 ± 0%~(all equal)
ParseFungibleToken/Without_memory_metering-4768 ± 0%768 ± 0%~(all equal)
ParseInfix-448.0 ± 0%48.0 ± 0%~(all equal)
QualifiedIdentifierCreation/One_level-40.00 0.00 ~(all equal)
QualifiedIdentifierCreation/Three_levels-42.00 ± 0%2.00 ± 0%~(all equal)
RuntimeResourceDictionaryValues-420.6k ± 0%20.6k ± 0%~(all equal)
RuntimeScriptNoop-450.0 ± 0%50.0 ± 0%~(all equal)
SuperTypeInference/arrays-43.00 ± 0%3.00 ± 0%~(all equal)
SuperTypeInference/composites-40.00 0.00 ~(all equal)
SuperTypeInference/integers-40.00 0.00 ~(all equal)
ValueIsSubtypeOfSemaType-41.00 ± 0%1.00 ± 0%~(all equal)