This is page 25 of 103. Use http://codebase.md/cyfrin/aderyn?lines=true&page={x} to view the full context.
# Directory Structure
```
├── .cargo
│ └── config.toml
├── .git-blame-ignore-revs
├── .gitattributes
├── .github
│ ├── images
│ │ ├── aderyn_logo.png
│ │ ├── poweredbycyfrinblack.png
│ │ └── poweredbycyfrinblue.png
│ ├── ISSUE_TEMPLATE
│ │ ├── bug_report.md
│ │ ├── false_positive_issue.md
│ │ └── feature_request.md
│ └── workflows
│ ├── cargo.yml
│ ├── dependencies.yml
│ ├── release.yml
│ ├── reports.yml
│ └── toml.yml
├── .gitignore
├── .gitmodules
├── .vscode
│ └── settings.json
├── aderyn
│ ├── Cargo.toml
│ ├── oranda.json
│ ├── README.md
│ ├── src
│ │ ├── birdsong.rs
│ │ ├── completions.rs
│ │ ├── lib.rs
│ │ ├── lsp.rs
│ │ ├── main.rs
│ │ ├── mcp.rs
│ │ └── panic.rs
│ └── templates
│ └── aderyn.toml
├── aderyn_core
│ ├── .gitignore
│ ├── Cargo.toml
│ ├── README.md
│ ├── src
│ │ ├── ast
│ │ │ ├── ast_nodes.rs
│ │ │ ├── ast.rs
│ │ │ ├── impls
│ │ │ │ ├── ctx
│ │ │ │ │ ├── utils.rs
│ │ │ │ │ └── workspace.rs
│ │ │ │ ├── ctx.rs
│ │ │ │ ├── disp
│ │ │ │ │ ├── blocks.rs
│ │ │ │ │ ├── contracts.rs
│ │ │ │ │ ├── enumerations.rs
│ │ │ │ │ ├── errors.rs
│ │ │ │ │ ├── events.rs
│ │ │ │ │ ├── expressions.rs
│ │ │ │ │ ├── functions.rs
│ │ │ │ │ ├── identifiers.rs
│ │ │ │ │ ├── literals.rs
│ │ │ │ │ ├── modifiers.rs
│ │ │ │ │ ├── statements.rs
│ │ │ │ │ ├── structures.rs
│ │ │ │ │ ├── types.rs
│ │ │ │ │ ├── user_defined_value_types.rs
│ │ │ │ │ ├── using_for_directives.rs
│ │ │ │ │ └── variables.rs
│ │ │ │ ├── disp.rs
│ │ │ │ ├── node
│ │ │ │ │ ├── blocks.rs
│ │ │ │ │ ├── contracts.rs
│ │ │ │ │ ├── documentation.rs
│ │ │ │ │ ├── enumerations.rs
│ │ │ │ │ ├── errors.rs
│ │ │ │ │ ├── events.rs
│ │ │ │ │ ├── expressions.rs
│ │ │ │ │ ├── functions.rs
│ │ │ │ │ ├── identifiers.rs
│ │ │ │ │ ├── import_directives.rs
│ │ │ │ │ ├── literals.rs
│ │ │ │ │ ├── modifiers.rs
│ │ │ │ │ ├── pragma_directives.rs
│ │ │ │ │ ├── source_units.rs
│ │ │ │ │ ├── statements.rs
│ │ │ │ │ ├── structures.rs
│ │ │ │ │ ├── types.rs
│ │ │ │ │ ├── user_defined_value_types.rs
│ │ │ │ │ ├── using_for_directives.rs
│ │ │ │ │ └── variables.rs
│ │ │ │ ├── node.rs
│ │ │ │ ├── own
│ │ │ │ │ ├── hashing.rs
│ │ │ │ │ ├── node_id.rs
│ │ │ │ │ ├── source_units.rs
│ │ │ │ │ └── utils.rs
│ │ │ │ └── own.rs
│ │ │ ├── impls.rs
│ │ │ ├── macros.rs
│ │ │ ├── magic.rs
│ │ │ ├── node_type.rs
│ │ │ └── yul.rs
│ │ ├── ast.rs
│ │ ├── audit
│ │ │ ├── attack_surface.rs
│ │ │ ├── auditor.rs
│ │ │ ├── entrypoint.rs
│ │ │ └── public_functions_no_sender.rs
│ │ ├── audit.rs
│ │ ├── context
│ │ │ ├── browser
│ │ │ │ ├── ancestral_line.rs
│ │ │ │ ├── closest_ancestor.rs
│ │ │ │ ├── external_calls.rs
│ │ │ │ ├── extractor.rs
│ │ │ │ ├── immediate_children.rs
│ │ │ │ ├── location.rs
│ │ │ │ ├── macros.rs
│ │ │ │ ├── parent.rs
│ │ │ │ ├── peek_over.rs
│ │ │ │ ├── peek_under.rs
│ │ │ │ ├── peek.rs
│ │ │ │ ├── siblings.rs
│ │ │ │ ├── sort_nodes.rs
│ │ │ │ └── storage_vars.rs
│ │ │ ├── browser.rs
│ │ │ ├── capturable.rs
│ │ │ ├── flow
│ │ │ │ ├── display.rs
│ │ │ │ ├── error.rs
│ │ │ │ ├── kind.rs
│ │ │ │ ├── primitives.rs
│ │ │ │ ├── reducibles.rs
│ │ │ │ ├── tests.rs
│ │ │ │ ├── utils.rs
│ │ │ │ ├── visualizer.rs
│ │ │ │ └── voids.rs
│ │ │ ├── flow.rs
│ │ │ ├── graph
│ │ │ │ ├── callgraph
│ │ │ │ │ ├── legacy.rs
│ │ │ │ │ ├── new.rs
│ │ │ │ │ ├── tests.rs
│ │ │ │ │ ├── utils.rs
│ │ │ │ │ └── visit.rs
│ │ │ │ ├── callgraph.rs
│ │ │ │ ├── preprocess
│ │ │ │ │ ├── legacy.rs
│ │ │ │ │ └── new.rs
│ │ │ │ ├── preprocess.rs
│ │ │ │ ├── traits.rs
│ │ │ │ └── utils.rs
│ │ │ ├── graph.rs
│ │ │ ├── macros.rs
│ │ │ ├── mcp
│ │ │ │ ├── callgraph
│ │ │ │ │ ├── render.rs
│ │ │ │ │ ├── tool.rs
│ │ │ │ │ └── utils.rs
│ │ │ │ ├── callgraph.rs
│ │ │ │ ├── contract_surface
│ │ │ │ │ ├── render.rs
│ │ │ │ │ ├── tool.rs
│ │ │ │ │ └── util.rs
│ │ │ │ ├── contract_surface.rs
│ │ │ │ ├── list_contracts
│ │ │ │ │ ├── render.rs
│ │ │ │ │ └── tool.rs
│ │ │ │ ├── list_contracts.rs
│ │ │ │ ├── node_finder
│ │ │ │ │ ├── render.rs
│ │ │ │ │ ├── tool.rs
│ │ │ │ │ └── utils.rs
│ │ │ │ ├── node_finder.rs
│ │ │ │ ├── node_summarizer
│ │ │ │ │ ├── render.rs
│ │ │ │ │ ├── tool.rs
│ │ │ │ │ └── utils.rs
│ │ │ │ ├── node_summarizer.rs
│ │ │ │ ├── project_overview
│ │ │ │ │ ├── render.rs
│ │ │ │ │ └── tool.rs
│ │ │ │ ├── project_overview.rs
│ │ │ │ ├── tool_guide
│ │ │ │ │ └── tool.rs
│ │ │ │ └── tool_guide.rs
│ │ │ ├── mcp.rs
│ │ │ ├── router
│ │ │ │ ├── external_calls.rs
│ │ │ │ ├── internal_calls.rs
│ │ │ │ ├── modifier_calls.rs
│ │ │ │ └── tests.rs
│ │ │ ├── router.rs
│ │ │ └── workspace.rs
│ │ ├── context.rs
│ │ ├── detect
│ │ │ ├── detector.rs
│ │ │ ├── entrypoint.rs
│ │ │ ├── helpers.rs
│ │ │ ├── high
│ │ │ │ ├── _template.rs
│ │ │ │ ├── abi_encode_packed_hash_collision.rs
│ │ │ │ ├── arbitrary_transfer_from.rs
│ │ │ │ ├── const_func_changes_state.rs
│ │ │ │ ├── contract_locks_ether.rs
│ │ │ │ ├── dangerous_unary_operator.rs
│ │ │ │ ├── delegate_call_unchecked_address.rs
│ │ │ │ ├── delete_nested_mapping.rs
│ │ │ │ ├── dynamic_array_length_assignment.rs
│ │ │ │ ├── enumerable_loop_removal.rs
│ │ │ │ ├── eth_send_unchecked_address.rs
│ │ │ │ ├── experimental_encoder.rs
│ │ │ │ ├── function_selector_collision.rs
│ │ │ │ ├── incorrect_caret_operator.rs
│ │ │ │ ├── incorrect_erc20_interface.rs
│ │ │ │ ├── incorrect_erc721_interface.rs
│ │ │ │ ├── incorrect_shift_order.rs
│ │ │ │ ├── misused_boolean.rs
│ │ │ │ ├── msg_value_in_loops.rs
│ │ │ │ ├── multiple_constructors.rs
│ │ │ │ ├── nested_struct_in_mapping.rs
│ │ │ │ ├── out_of_order_retryable.rs
│ │ │ │ ├── pre_declared_variable_usage.rs
│ │ │ │ ├── reentrancy_state_change.rs
│ │ │ │ ├── reused_contract_name.rs
│ │ │ │ ├── rtlo.rs
│ │ │ │ ├── selfdestruct.rs
│ │ │ │ ├── signed_integer_storage_array.rs
│ │ │ │ ├── state_variable_shadowing.rs
│ │ │ │ ├── storage_array_memory_edit.rs
│ │ │ │ ├── strict_equality_contract_balance.rs
│ │ │ │ ├── tautological_compare.rs
│ │ │ │ ├── tautology_or_contradiction.rs
│ │ │ │ ├── tx_origin_used_for_auth.rs
│ │ │ │ ├── unchecked_low_level_call.rs
│ │ │ │ ├── unchecked_send.rs
│ │ │ │ ├── unprotected_initializer.rs
│ │ │ │ ├── unsafe_casting.rs
│ │ │ │ ├── weak_randomness.rs
│ │ │ │ └── yul_return.rs
│ │ │ ├── high.rs
│ │ │ ├── low
│ │ │ │ ├── _template.rs
│ │ │ │ ├── assert_state_change.rs
│ │ │ │ ├── block_timestamp_deadline.rs
│ │ │ │ ├── boolean_equality.rs
│ │ │ │ ├── builtin_symbol_shadowing.rs
│ │ │ │ ├── centralization_risk.rs
│ │ │ │ ├── constant_function_contains_assembly.rs
│ │ │ │ ├── costly_loop.rs
│ │ │ │ ├── dead_code.rs
│ │ │ │ ├── delegatecall_in_loop.rs
│ │ │ │ ├── deprecated_oz_function.rs
│ │ │ │ ├── division_before_multiplication.rs
│ │ │ │ ├── ecrecover.rs
│ │ │ │ ├── empty_block.rs
│ │ │ │ ├── empty_require_revert.rs
│ │ │ │ ├── function_initializing_state.rs
│ │ │ │ ├── function_pointer_in_constructor.rs
│ │ │ │ ├── inconsistent_type_names.rs
│ │ │ │ ├── incorrect_modifier.rs
│ │ │ │ ├── internal_function_used_once.rs
│ │ │ │ ├── large_numeric_literal.rs
│ │ │ │ ├── literal_instead_of_constant.rs
│ │ │ │ ├── local_variable_shadowing.rs
│ │ │ │ ├── missing_inheritance.rs
│ │ │ │ ├── modifier_used_only_once.rs
│ │ │ │ ├── multiple_placeholders.rs
│ │ │ │ ├── non_reentrant_not_first.rs
│ │ │ │ ├── push_0_opcode.rs
│ │ │ │ ├── redundant_statement.rs
│ │ │ │ ├── require_revert_in_loop.rs
│ │ │ │ ├── return_bomb.rs
│ │ │ │ ├── solmate_safe_transfer_lib.rs
│ │ │ │ ├── state_change_without_event.rs
│ │ │ │ ├── state_no_address_check.rs
│ │ │ │ ├── state_variable_could_be_constant.rs
│ │ │ │ ├── state_variable_could_be_immutable.rs
│ │ │ │ ├── state_variable_read_external.rs
│ │ │ │ ├── storage_array_length_not_cached.rs
│ │ │ │ ├── todo.rs
│ │ │ │ ├── unchecked_return.rs
│ │ │ │ ├── uninitialized_local_variable.rs
│ │ │ │ ├── unsafe_erc20_operation.rs
│ │ │ │ ├── unsafe_oz_erc721_mint.rs
│ │ │ │ ├── unspecific_solidity_pragma.rs
│ │ │ │ ├── unused_error.rs
│ │ │ │ ├── unused_import.rs
│ │ │ │ ├── unused_public_function.rs
│ │ │ │ ├── unused_state_variable.rs
│ │ │ │ └── void_constructor.rs
│ │ │ ├── low.rs
│ │ │ └── test_utils.rs
│ │ ├── detect.rs
│ │ ├── lib.rs
│ │ ├── stats
│ │ │ ├── cloc.rs
│ │ │ ├── dbg_tips.txt
│ │ │ ├── ignore.rs
│ │ │ ├── token.rs
│ │ │ └── util.rs
│ │ ├── stats.rs
│ │ ├── test_utils
│ │ │ └── load_source_unit.rs
│ │ ├── test_utils.rs
│ │ ├── visitor
│ │ │ ├── ast_visitor.rs
│ │ │ ├── macros.rs
│ │ │ └── workspace_visitor.rs
│ │ └── visitor.rs
│ ├── templates
│ │ └── mcp-tool-response
│ │ ├── callgraph.md
│ │ ├── contract_surface.md
│ │ ├── list_contracts.md
│ │ ├── node_finder_get_all.md
│ │ ├── node_finder_grep.md
│ │ ├── node_finder_search.md
│ │ ├── node_summarizer.md
│ │ ├── project_overview.md
│ │ └── tool_guide.md
│ └── tests
│ ├── common
│ │ ├── ancestral_line.rs
│ │ ├── closest_ancestor.rs
│ │ ├── immediate_children.rs
│ │ ├── immediate_parent.rs
│ │ ├── mod.rs
│ │ ├── new_ast_nodes.rs
│ │ ├── peek_over.rs
│ │ └── sibling.rs
│ └── traversal.rs
├── aderyn_driver
│ ├── .gitignore
│ ├── benches
│ │ └── detectors.rs
│ ├── Cargo.toml
│ ├── README.md
│ ├── src
│ │ ├── compile.rs
│ │ ├── config.rs
│ │ ├── display.rs
│ │ ├── driver.rs
│ │ ├── interface
│ │ │ ├── json.rs
│ │ │ ├── lsp.rs
│ │ │ ├── markdown.rs
│ │ │ ├── mod.rs
│ │ │ ├── sarif.rs
│ │ │ ├── tables.rs
│ │ │ └── util.rs
│ │ ├── lib.rs
│ │ ├── mcp.rs
│ │ ├── process.rs
│ │ └── runner.rs
│ └── tests
│ └── astgen.rs
├── bacon.toml
├── benchmarks
│ ├── aderyn
│ │ ├── base
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ ├── change
│ │ │ └── estimates.json
│ │ ├── new
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ └── report
│ │ ├── both
│ │ │ ├── iteration_times.svg
│ │ │ └── pdf.svg
│ │ ├── change
│ │ │ ├── mean.svg
│ │ │ ├── median.svg
│ │ │ └── t-test.svg
│ │ ├── index.html
│ │ ├── iteration_times_small.svg
│ │ ├── iteration_times.svg
│ │ ├── MAD.svg
│ │ ├── mean.svg
│ │ ├── median.svg
│ │ ├── pdf_small.svg
│ │ ├── pdf.svg
│ │ ├── relative_iteration_times_small.svg
│ │ ├── relative_pdf_small.svg
│ │ ├── SD.svg
│ │ └── typical.svg
│ ├── arbitrary-transfer-from
│ │ ├── base
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ ├── change
│ │ │ └── estimates.json
│ │ ├── new
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ └── report
│ │ ├── both
│ │ │ ├── pdf.svg
│ │ │ └── regression.svg
│ │ ├── change
│ │ │ ├── mean.svg
│ │ │ ├── median.svg
│ │ │ └── t-test.svg
│ │ ├── index.html
│ │ ├── MAD.svg
│ │ ├── mean.svg
│ │ ├── median.svg
│ │ ├── pdf_small.svg
│ │ ├── pdf.svg
│ │ ├── regression_small.svg
│ │ ├── regression.svg
│ │ ├── relative_pdf_small.svg
│ │ ├── relative_regression_small.svg
│ │ ├── SD.svg
│ │ ├── slope.svg
│ │ └── typical.svg
│ ├── avoid-abi-encode-packed
│ │ ├── base
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ ├── change
│ │ │ └── estimates.json
│ │ ├── new
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ └── report
│ │ ├── both
│ │ │ ├── pdf.svg
│ │ │ └── regression.svg
│ │ ├── change
│ │ │ ├── mean.svg
│ │ │ ├── median.svg
│ │ │ └── t-test.svg
│ │ ├── index.html
│ │ ├── MAD.svg
│ │ ├── mean.svg
│ │ ├── median.svg
│ │ ├── pdf_small.svg
│ │ ├── pdf.svg
│ │ ├── regression_small.svg
│ │ ├── regression.svg
│ │ ├── relative_pdf_small.svg
│ │ ├── relative_regression_small.svg
│ │ ├── SD.svg
│ │ ├── slope.svg
│ │ └── typical.svg
│ ├── block-timestamp-deadline
│ │ ├── base
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ ├── change
│ │ │ └── estimates.json
│ │ ├── new
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ └── report
│ │ ├── both
│ │ │ ├── pdf.svg
│ │ │ └── regression.svg
│ │ ├── change
│ │ │ ├── mean.svg
│ │ │ ├── median.svg
│ │ │ └── t-test.svg
│ │ ├── index.html
│ │ ├── MAD.svg
│ │ ├── mean.svg
│ │ ├── median.svg
│ │ ├── pdf_small.svg
│ │ ├── pdf.svg
│ │ ├── regression_small.svg
│ │ ├── regression.svg
│ │ ├── relative_pdf_small.svg
│ │ ├── relative_regression_small.svg
│ │ ├── SD.svg
│ │ ├── slope.svg
│ │ └── typical.svg
│ ├── centralization-risk
│ │ ├── base
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ ├── change
│ │ │ └── estimates.json
│ │ ├── new
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ └── report
│ │ ├── both
│ │ │ ├── pdf.svg
│ │ │ └── regression.svg
│ │ ├── change
│ │ │ ├── mean.svg
│ │ │ ├── median.svg
│ │ │ └── t-test.svg
│ │ ├── index.html
│ │ ├── MAD.svg
│ │ ├── mean.svg
│ │ ├── median.svg
│ │ ├── pdf_small.svg
│ │ ├── pdf.svg
│ │ ├── regression_small.svg
│ │ ├── regression.svg
│ │ ├── relative_pdf_small.svg
│ │ ├── relative_regression_small.svg
│ │ ├── SD.svg
│ │ ├── slope.svg
│ │ └── typical.svg
│ ├── constants-instead-of-literals
│ │ ├── base
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ ├── change
│ │ │ └── estimates.json
│ │ ├── new
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ └── report
│ │ ├── both
│ │ │ ├── pdf.svg
│ │ │ └── regression.svg
│ │ ├── change
│ │ │ ├── mean.svg
│ │ │ ├── median.svg
│ │ │ └── t-test.svg
│ │ ├── index.html
│ │ ├── MAD.svg
│ │ ├── mean.svg
│ │ ├── median.svg
│ │ ├── pdf_small.svg
│ │ ├── pdf.svg
│ │ ├── regression_small.svg
│ │ ├── regression.svg
│ │ ├── relative_pdf_small.svg
│ │ ├── relative_regression_small.svg
│ │ ├── SD.svg
│ │ ├── slope.svg
│ │ └── typical.svg
│ ├── delegate-call-in-loop
│ │ ├── base
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ ├── change
│ │ │ └── estimates.json
│ │ ├── new
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ └── report
│ │ ├── both
│ │ │ ├── pdf.svg
│ │ │ └── regression.svg
│ │ ├── change
│ │ │ ├── mean.svg
│ │ │ ├── median.svg
│ │ │ └── t-test.svg
│ │ ├── index.html
│ │ ├── MAD.svg
│ │ ├── mean.svg
│ │ ├── median.svg
│ │ ├── pdf_small.svg
│ │ ├── pdf.svg
│ │ ├── regression_small.svg
│ │ ├── regression.svg
│ │ ├── relative_pdf_small.svg
│ │ ├── relative_regression_small.svg
│ │ ├── SD.svg
│ │ ├── slope.svg
│ │ └── typical.svg
│ ├── deprecated-oz-functions
│ │ ├── base
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ ├── change
│ │ │ └── estimates.json
│ │ ├── new
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ └── report
│ │ ├── both
│ │ │ ├── pdf.svg
│ │ │ └── regression.svg
│ │ ├── change
│ │ │ ├── mean.svg
│ │ │ ├── median.svg
│ │ │ └── t-test.svg
│ │ ├── index.html
│ │ ├── MAD.svg
│ │ ├── mean.svg
│ │ ├── median.svg
│ │ ├── pdf_small.svg
│ │ ├── pdf.svg
│ │ ├── regression_small.svg
│ │ ├── regression.svg
│ │ ├── relative_pdf_small.svg
│ │ ├── relative_regression_small.svg
│ │ ├── SD.svg
│ │ ├── slope.svg
│ │ └── typical.svg
│ ├── ecrecover
│ │ ├── base
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ ├── change
│ │ │ └── estimates.json
│ │ ├── new
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ └── report
│ │ ├── both
│ │ │ ├── pdf.svg
│ │ │ └── regression.svg
│ │ ├── change
│ │ │ ├── mean.svg
│ │ │ ├── median.svg
│ │ │ └── t-test.svg
│ │ ├── index.html
│ │ ├── MAD.svg
│ │ ├── mean.svg
│ │ ├── median.svg
│ │ ├── pdf_small.svg
│ │ ├── pdf.svg
│ │ ├── regression_small.svg
│ │ ├── regression.svg
│ │ ├── relative_pdf_small.svg
│ │ ├── relative_regression_small.svg
│ │ ├── SD.svg
│ │ ├── slope.svg
│ │ └── typical.svg
│ ├── empty-block
│ │ ├── base
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ ├── change
│ │ │ └── estimates.json
│ │ ├── new
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ └── report
│ │ ├── both
│ │ │ ├── pdf.svg
│ │ │ └── regression.svg
│ │ ├── change
│ │ │ ├── mean.svg
│ │ │ ├── median.svg
│ │ │ └── t-test.svg
│ │ ├── index.html
│ │ ├── MAD.svg
│ │ ├── mean.svg
│ │ ├── median.svg
│ │ ├── pdf_small.svg
│ │ ├── pdf.svg
│ │ ├── regression_small.svg
│ │ ├── regression.svg
│ │ ├── relative_pdf_small.svg
│ │ ├── relative_regression_small.svg
│ │ ├── SD.svg
│ │ ├── slope.svg
│ │ └── typical.svg
│ ├── hello_world
│ │ ├── base
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ ├── new
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ └── report
│ │ ├── index.html
│ │ ├── MAD.svg
│ │ ├── mean.svg
│ │ ├── median.svg
│ │ ├── pdf_small.svg
│ │ ├── pdf.svg
│ │ ├── regression_small.svg
│ │ ├── regression.svg
│ │ ├── SD.svg
│ │ ├── slope.svg
│ │ └── typical.svg
│ ├── inconsistent-type-names
│ │ ├── base
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ ├── change
│ │ │ └── estimates.json
│ │ ├── new
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ └── report
│ │ ├── both
│ │ │ ├── pdf.svg
│ │ │ └── regression.svg
│ │ ├── change
│ │ │ ├── mean.svg
│ │ │ ├── median.svg
│ │ │ └── t-test.svg
│ │ ├── index.html
│ │ ├── MAD.svg
│ │ ├── mean.svg
│ │ ├── median.svg
│ │ ├── pdf_small.svg
│ │ ├── pdf.svg
│ │ ├── regression_small.svg
│ │ ├── regression.svg
│ │ ├── relative_pdf_small.svg
│ │ ├── relative_regression_small.svg
│ │ ├── SD.svg
│ │ ├── slope.svg
│ │ └── typical.svg
│ ├── large-numeric-literal
│ │ ├── base
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ ├── change
│ │ │ └── estimates.json
│ │ ├── new
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ └── report
│ │ ├── both
│ │ │ ├── pdf.svg
│ │ │ └── regression.svg
│ │ ├── change
│ │ │ ├── mean.svg
│ │ │ ├── median.svg
│ │ │ └── t-test.svg
│ │ ├── index.html
│ │ ├── MAD.svg
│ │ ├── mean.svg
│ │ ├── median.svg
│ │ ├── pdf_small.svg
│ │ ├── pdf.svg
│ │ ├── regression_small.svg
│ │ ├── regression.svg
│ │ ├── relative_pdf_small.svg
│ │ ├── relative_regression_small.svg
│ │ ├── SD.svg
│ │ ├── slope.svg
│ │ └── typical.svg
│ ├── non-reentrant-before-others
│ │ ├── base
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ ├── change
│ │ │ └── estimates.json
│ │ ├── new
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ └── report
│ │ ├── both
│ │ │ ├── pdf.svg
│ │ │ └── regression.svg
│ │ ├── change
│ │ │ ├── mean.svg
│ │ │ ├── median.svg
│ │ │ └── t-test.svg
│ │ ├── index.html
│ │ ├── MAD.svg
│ │ ├── mean.svg
│ │ ├── median.svg
│ │ ├── pdf_small.svg
│ │ ├── pdf.svg
│ │ ├── regression_small.svg
│ │ ├── regression.svg
│ │ ├── relative_pdf_small.svg
│ │ ├── relative_regression_small.svg
│ │ ├── SD.svg
│ │ ├── slope.svg
│ │ └── typical.svg
│ ├── push-zero-opcode
│ │ ├── base
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ ├── change
│ │ │ └── estimates.json
│ │ ├── new
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ └── report
│ │ ├── both
│ │ │ ├── pdf.svg
│ │ │ └── regression.svg
│ │ ├── change
│ │ │ ├── mean.svg
│ │ │ ├── median.svg
│ │ │ └── t-test.svg
│ │ ├── index.html
│ │ ├── MAD.svg
│ │ ├── mean.svg
│ │ ├── median.svg
│ │ ├── pdf_small.svg
│ │ ├── pdf.svg
│ │ ├── regression_small.svg
│ │ ├── regression.svg
│ │ ├── relative_pdf_small.svg
│ │ ├── relative_regression_small.svg
│ │ ├── SD.svg
│ │ ├── slope.svg
│ │ └── typical.svg
│ ├── report
│ │ └── index.html
│ ├── require-with-string
│ │ ├── base
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ ├── change
│ │ │ └── estimates.json
│ │ ├── new
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ └── report
│ │ ├── both
│ │ │ ├── pdf.svg
│ │ │ └── regression.svg
│ │ ├── change
│ │ │ ├── mean.svg
│ │ │ ├── median.svg
│ │ │ └── t-test.svg
│ │ ├── index.html
│ │ ├── MAD.svg
│ │ ├── mean.svg
│ │ ├── median.svg
│ │ ├── pdf_small.svg
│ │ ├── pdf.svg
│ │ ├── regression_small.svg
│ │ ├── regression.svg
│ │ ├── relative_pdf_small.svg
│ │ ├── relative_regression_small.svg
│ │ ├── SD.svg
│ │ ├── slope.svg
│ │ └── typical.svg
│ ├── solmate-safe-transfer-lib
│ │ ├── base
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ ├── change
│ │ │ └── estimates.json
│ │ ├── new
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ └── report
│ │ ├── both
│ │ │ ├── pdf.svg
│ │ │ └── regression.svg
│ │ ├── change
│ │ │ ├── mean.svg
│ │ │ ├── median.svg
│ │ │ └── t-test.svg
│ │ ├── index.html
│ │ ├── MAD.svg
│ │ ├── mean.svg
│ │ ├── median.svg
│ │ ├── pdf_small.svg
│ │ ├── pdf.svg
│ │ ├── regression_small.svg
│ │ ├── regression.svg
│ │ ├── relative_pdf_small.svg
│ │ ├── relative_regression_small.svg
│ │ ├── SD.svg
│ │ ├── slope.svg
│ │ └── typical.svg
│ ├── unindexed-events
│ │ ├── base
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ ├── change
│ │ │ └── estimates.json
│ │ ├── new
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ └── report
│ │ ├── both
│ │ │ ├── pdf.svg
│ │ │ └── regression.svg
│ │ ├── change
│ │ │ ├── mean.svg
│ │ │ ├── median.svg
│ │ │ └── t-test.svg
│ │ ├── index.html
│ │ ├── MAD.svg
│ │ ├── mean.svg
│ │ ├── median.svg
│ │ ├── pdf_small.svg
│ │ ├── pdf.svg
│ │ ├── regression_small.svg
│ │ ├── regression.svg
│ │ ├── relative_pdf_small.svg
│ │ ├── relative_regression_small.svg
│ │ ├── SD.svg
│ │ ├── slope.svg
│ │ └── typical.svg
│ ├── unprotected-initializer
│ │ ├── base
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ ├── change
│ │ │ └── estimates.json
│ │ ├── new
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ └── report
│ │ ├── both
│ │ │ ├── pdf.svg
│ │ │ └── regression.svg
│ │ ├── change
│ │ │ ├── mean.svg
│ │ │ ├── median.svg
│ │ │ └── t-test.svg
│ │ ├── index.html
│ │ ├── MAD.svg
│ │ ├── mean.svg
│ │ ├── median.svg
│ │ ├── pdf_small.svg
│ │ ├── pdf.svg
│ │ ├── regression_small.svg
│ │ ├── regression.svg
│ │ ├── relative_pdf_small.svg
│ │ ├── relative_regression_small.svg
│ │ ├── SD.svg
│ │ ├── slope.svg
│ │ └── typical.svg
│ ├── unsafe-erc20-functions
│ │ ├── base
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ ├── change
│ │ │ └── estimates.json
│ │ ├── new
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ └── report
│ │ ├── both
│ │ │ ├── pdf.svg
│ │ │ └── regression.svg
│ │ ├── change
│ │ │ ├── mean.svg
│ │ │ ├── median.svg
│ │ │ └── t-test.svg
│ │ ├── index.html
│ │ ├── MAD.svg
│ │ ├── mean.svg
│ │ ├── median.svg
│ │ ├── pdf_small.svg
│ │ ├── pdf.svg
│ │ ├── regression_small.svg
│ │ ├── regression.svg
│ │ ├── relative_pdf_small.svg
│ │ ├── relative_regression_small.svg
│ │ ├── SD.svg
│ │ ├── slope.svg
│ │ └── typical.svg
│ ├── unsafe-oz-erc721-mint
│ │ ├── base
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ ├── change
│ │ │ └── estimates.json
│ │ ├── new
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ └── report
│ │ ├── both
│ │ │ ├── pdf.svg
│ │ │ └── regression.svg
│ │ ├── change
│ │ │ ├── mean.svg
│ │ │ ├── median.svg
│ │ │ └── t-test.svg
│ │ ├── index.html
│ │ ├── MAD.svg
│ │ ├── mean.svg
│ │ ├── median.svg
│ │ ├── pdf_small.svg
│ │ ├── pdf.svg
│ │ ├── regression_small.svg
│ │ ├── regression.svg
│ │ ├── relative_pdf_small.svg
│ │ ├── relative_regression_small.svg
│ │ ├── SD.svg
│ │ ├── slope.svg
│ │ └── typical.svg
│ ├── unspecific-solidity-pragma
│ │ ├── base
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ ├── change
│ │ │ └── estimates.json
│ │ ├── new
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ └── report
│ │ ├── both
│ │ │ ├── pdf.svg
│ │ │ └── regression.svg
│ │ ├── change
│ │ │ ├── mean.svg
│ │ │ ├── median.svg
│ │ │ └── t-test.svg
│ │ ├── index.html
│ │ ├── MAD.svg
│ │ ├── mean.svg
│ │ ├── median.svg
│ │ ├── pdf_small.svg
│ │ ├── pdf.svg
│ │ ├── regression_small.svg
│ │ ├── regression.svg
│ │ ├── relative_pdf_small.svg
│ │ ├── relative_regression_small.svg
│ │ ├── SD.svg
│ │ ├── slope.svg
│ │ └── typical.svg
│ ├── useless-internal-function
│ │ ├── base
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ ├── change
│ │ │ └── estimates.json
│ │ ├── new
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ └── report
│ │ ├── both
│ │ │ ├── pdf.svg
│ │ │ └── regression.svg
│ │ ├── change
│ │ │ ├── mean.svg
│ │ │ ├── median.svg
│ │ │ └── t-test.svg
│ │ ├── index.html
│ │ ├── MAD.svg
│ │ ├── mean.svg
│ │ ├── median.svg
│ │ ├── pdf_small.svg
│ │ ├── pdf.svg
│ │ ├── regression_small.svg
│ │ ├── regression.svg
│ │ ├── relative_pdf_small.svg
│ │ ├── relative_regression_small.svg
│ │ ├── SD.svg
│ │ ├── slope.svg
│ │ └── typical.svg
│ ├── useless-modifier
│ │ ├── base
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ ├── change
│ │ │ └── estimates.json
│ │ ├── new
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ └── report
│ │ ├── both
│ │ │ ├── pdf.svg
│ │ │ └── regression.svg
│ │ ├── change
│ │ │ ├── mean.svg
│ │ │ ├── median.svg
│ │ │ └── t-test.svg
│ │ ├── index.html
│ │ ├── MAD.svg
│ │ ├── mean.svg
│ │ ├── median.svg
│ │ ├── pdf_small.svg
│ │ ├── pdf.svg
│ │ ├── regression_small.svg
│ │ ├── regression.svg
│ │ ├── relative_pdf_small.svg
│ │ ├── relative_regression_small.svg
│ │ ├── SD.svg
│ │ ├── slope.svg
│ │ └── typical.svg
│ ├── useless-public-function
│ │ ├── base
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ ├── change
│ │ │ └── estimates.json
│ │ ├── new
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ └── report
│ │ ├── both
│ │ │ ├── pdf.svg
│ │ │ └── regression.svg
│ │ ├── change
│ │ │ ├── mean.svg
│ │ │ ├── median.svg
│ │ │ └── t-test.svg
│ │ ├── index.html
│ │ ├── MAD.svg
│ │ ├── mean.svg
│ │ ├── median.svg
│ │ ├── pdf_small.svg
│ │ ├── pdf.svg
│ │ ├── regression_small.svg
│ │ ├── regression.svg
│ │ ├── relative_pdf_small.svg
│ │ ├── relative_regression_small.svg
│ │ ├── SD.svg
│ │ ├── slope.svg
│ │ └── typical.svg
│ └── zero-address-check
│ ├── base
│ │ ├── benchmark.json
│ │ ├── estimates.json
│ │ ├── sample.json
│ │ └── tukey.json
│ ├── change
│ │ └── estimates.json
│ ├── new
│ │ ├── benchmark.json
│ │ ├── estimates.json
│ │ ├── sample.json
│ │ └── tukey.json
│ └── report
│ ├── both
│ │ ├── pdf.svg
│ │ └── regression.svg
│ ├── change
│ │ ├── mean.svg
│ │ ├── median.svg
│ │ └── t-test.svg
│ ├── index.html
│ ├── MAD.svg
│ ├── mean.svg
│ ├── median.svg
│ ├── pdf_small.svg
│ ├── pdf.svg
│ ├── regression_small.svg
│ ├── regression.svg
│ ├── relative_pdf_small.svg
│ ├── relative_regression_small.svg
│ ├── SD.svg
│ ├── slope.svg
│ └── typical.svg
├── Cargo.lock
├── Cargo.toml
├── cli
│ ├── benchmarks.sh
│ └── reportgen.sh
├── CODEOWNERS
├── CONTRIBUTING.md
├── cyfrinup
│ ├── dynamic_script
│ └── why.md
├── deny.toml
├── dist-workspace.toml
├── funding.json
├── LICENSE
├── Makefile
├── package-lock.json
├── package.json
├── README.md
├── RELEASE_CHECKLIST.md
├── reports
│ ├── adhoc-sol-files-highs-only-report.json
│ ├── adhoc-sol-files-report.md
│ ├── ccip-functions-report.md
│ ├── empty_report.md
│ ├── hardhat-playground-report.md
│ ├── nft-report-icm.md
│ ├── nft-report.md
│ ├── prb-math-report.md
│ ├── report.json
│ ├── report.md
│ ├── report.sarif
│ ├── sablier-aderyn-toml-nested-root.md
│ ├── templegold-report.md
│ └── uniswap_profile.md
├── rust-toolchain.toml
├── rustfmt.toml
├── tests
│ ├── adhoc-sol-files
│ │ ├── aderyn.toml
│ │ ├── Counter.sol
│ │ ├── DemoASTNodes.sol
│ │ ├── Helper.sol
│ │ ├── InconsistentUints.sol
│ │ ├── inheritance
│ │ │ ├── ExtendedInheritance.sol
│ │ │ ├── IContractInheritance.sol
│ │ │ └── InheritanceBase.sol
│ │ ├── InternalFunctions.sol
│ │ ├── lib
│ │ │ └── ThisShouldBeExcluded.sol
│ │ ├── multiple-versions
│ │ │ ├── 0.4
│ │ │ │ ├── A.sol
│ │ │ │ └── B.sol
│ │ │ ├── 0.5
│ │ │ │ ├── A.sol
│ │ │ │ └── B.sol
│ │ │ ├── 0.6
│ │ │ │ ├── A.sol
│ │ │ │ └── B.sol
│ │ │ ├── 0.7
│ │ │ │ ├── A.sol
│ │ │ │ └── B.sol
│ │ │ └── 0.8
│ │ │ ├── A.sol
│ │ │ └── B.sol
│ │ ├── OnceModifierExample.sol
│ │ └── StateVariables.sol
│ ├── ast
│ │ ├── abstract_contract.json
│ │ ├── address_payable.json
│ │ ├── array_type_name.json
│ │ ├── ast-erc4626.json
│ │ ├── base_constructor_call.json
│ │ ├── bit_not.json
│ │ ├── call.json
│ │ ├── constructor.json
│ │ ├── contract_dep_order.json
│ │ ├── do_while.json
│ │ ├── documentation_1.json
│ │ ├── documentation_2.json
│ │ ├── documentation_3.json
│ │ ├── documentation_local_variable.json
│ │ ├── documentation_on_statements.json
│ │ ├── documentation_triple.json
│ │ ├── empty_block.json
│ │ ├── enum_value_declaration.json
│ │ ├── enum_value.json
│ │ ├── event_definition.json
│ │ ├── experimental_encoder_pragma.json
│ │ ├── fallback_and_reveice_ether.json
│ │ ├── fallback_payable.json
│ │ ├── fallback.json
│ │ ├── function_type.json
│ │ ├── function.json
│ │ ├── global_enum.json
│ │ ├── global_struct.json
│ │ ├── inheritance_specifier.json
│ │ ├── leave.json
│ │ ├── license.json
│ │ ├── long_type_name_binary_operation.json
│ │ ├── long_type_name_identifier.json
│ │ ├── loop.json
│ │ ├── mappings.json
│ │ ├── modifier_definition.json
│ │ ├── modifier_invocation.json
│ │ ├── mutability.json
│ │ ├── nested_functions.json
│ │ ├── non_utf8.json
│ │ ├── override.json
│ │ ├── placeholder_statement.json
│ │ ├── receive_ether.json
│ │ ├── short_type_name_ref.json
│ │ ├── short_type_name.json
│ │ ├── slot_offset.json
│ │ ├── smoke.json
│ │ ├── source_location.json
│ │ ├── string.json
│ │ ├── stringlit.json
│ │ ├── switch_default.json
│ │ ├── switch.json
│ │ ├── try_catch.json
│ │ ├── two_base_functions.json
│ │ ├── unicode.json
│ │ ├── used_errors.json
│ │ ├── userDefinedValueType.json
│ │ ├── using_for_directive.json
│ │ ├── var_access.json
│ │ └── yul_hex_literal.json
│ ├── contract-playground
│ │ ├── .github
│ │ │ └── workflows
│ │ │ └── test.yml
│ │ ├── .gitignore
│ │ ├── dot
│ │ │ └── .gitkeep
│ │ ├── foundry.toml
│ │ ├── README.md
│ │ ├── script
│ │ │ └── Counter.s.sol
│ │ ├── src
│ │ │ ├── AbstractContract.sol
│ │ │ ├── AderynIgnoreCustomDetectors.sol
│ │ │ ├── AdminContract.sol
│ │ │ ├── ArbitraryTransferFrom.sol
│ │ │ ├── AssemblyExample.sol
│ │ │ ├── AssertStateChange.sol
│ │ │ ├── auditor_mode
│ │ │ │ ├── ExternalCalls.sol
│ │ │ │ └── PublicFunctionsWithoutSenderCheck.sol
│ │ │ ├── BooleanEquality.sol
│ │ │ ├── BuiltinSymbolShadow.sol
│ │ │ ├── CacheArrayLength.sol
│ │ │ ├── CallGraphTests.sol
│ │ │ ├── Casting.sol
│ │ │ ├── cloc
│ │ │ │ ├── AnotherHeavilyCommentedContract.sol
│ │ │ │ ├── EmptyContractFile.sol
│ │ │ │ └── HeavilyCommentedContract.sol
│ │ │ ├── CompilerBugStorageSignedIntegerArray.sol
│ │ │ ├── ConstantFuncsAssembly.sol
│ │ │ ├── ConstantsLiterals.sol
│ │ │ ├── ConstFuncChangeState.sol
│ │ │ ├── ContractLocksEther.sol
│ │ │ ├── ContractWithTodo.sol
│ │ │ ├── control_flow
│ │ │ │ └── SimpleProgram.sol
│ │ │ ├── CostlyOperationsInsideLoops.sol
│ │ │ ├── Counter.sol
│ │ │ ├── CrazyPragma.sol
│ │ │ ├── DangerousStrictEquality1.sol
│ │ │ ├── DangerousStrictEquality2.sol
│ │ │ ├── DangerousUnaryOperator.sol
│ │ │ ├── DeadCode.sol
│ │ │ ├── DelegateCallWithoutAddressCheck.sol
│ │ │ ├── DeletionNestedMappingStructureContract.sol
│ │ │ ├── DeprecatedOZFunctions.sol
│ │ │ ├── DivisionBeforeMultiplication.sol
│ │ │ ├── DynamicArrayLengthAssignment.sol
│ │ │ ├── EmitAfterExternalCall.sol
│ │ │ ├── EmptyBlocks.sol
│ │ │ ├── EnumerableSetIteration.sol
│ │ │ ├── eth2
│ │ │ │ └── DepositContract.sol
│ │ │ ├── ExperimentalEncoder.sol
│ │ │ ├── ExternalCalls.sol
│ │ │ ├── FunctionInitializingState.sol
│ │ │ ├── FunctionPointers.sol
│ │ │ ├── FunctionSignatureCollision.sol
│ │ │ ├── HugeConstants.sol
│ │ │ ├── IgnoreEverything.sol
│ │ │ ├── InconsistentUints.sol
│ │ │ ├── IncorrectCaretOperator.sol
│ │ │ ├── IncorrectERC20.sol
│ │ │ ├── IncorrectERC721.sol
│ │ │ ├── IncorrectModifier.sol
│ │ │ ├── IncorrectShift.sol
│ │ │ ├── inheritance
│ │ │ │ ├── ExtendedInheritance.sol
│ │ │ │ ├── IContractInheritance.sol
│ │ │ │ └── InheritanceBase.sol
│ │ │ ├── InternalFunctions.sol
│ │ │ ├── KeccakContract.sol
│ │ │ ├── LocalVariableShadow.sol
│ │ │ ├── MissingInheritance.sol
│ │ │ ├── MisusedBoolean.sol
│ │ │ ├── MsgValueInLoop.sol
│ │ │ ├── MultipleConstructorSchemes.sol
│ │ │ ├── MultiplePlaceholders.sol
│ │ │ ├── nested
│ │ │ │ ├── 1
│ │ │ │ │ └── Nested.sol
│ │ │ │ └── 2
│ │ │ │ └── Nested.sol
│ │ │ ├── nested_mappings
│ │ │ │ ├── LaterVersion.sol
│ │ │ │ └── NestedMappings.sol
│ │ │ ├── OnceModifierExample.sol
│ │ │ ├── OnlyLibrary.sol
│ │ │ ├── OutOfOrderRetryable.sol
│ │ │ ├── parent_chain
│ │ │ │ └── ParentChainContract.sol
│ │ │ ├── PragmaRange.sol
│ │ │ ├── PreDeclaredVarUsage.sol
│ │ │ ├── PublicFunction.sol
│ │ │ ├── PublicVariableReadInExternalContext.sol
│ │ │ ├── RedundantStatements.sol
│ │ │ ├── ReturnBomb.sol
│ │ │ ├── reused_contract_name
│ │ │ │ ├── ContractA.sol
│ │ │ │ └── ContractB.sol
│ │ │ ├── RevertsAndRequriesInLoops.sol
│ │ │ ├── router
│ │ │ │ ├── ExternalCalls.sol
│ │ │ │ ├── FallbackAndReceiveOverrides.sol
│ │ │ │ ├── InternalCalls.sol
│ │ │ │ ├── ModifierCalls.sol
│ │ │ │ └── VarOverridesFunction.sol
│ │ │ ├── RTLO.sol
│ │ │ ├── SendEtherNoChecks.sol
│ │ │ ├── SendEtherNoChecksLibImport.sol
│ │ │ ├── StateChangeAfterExternalCall.sol
│ │ │ ├── StateShadowing.sol
│ │ │ ├── StateVariableCouldBeDeclaredConstant.sol
│ │ │ ├── StateVariableCouldBeDeclaredImmutable.sol
│ │ │ ├── StateVariables.sol
│ │ │ ├── StateVariablesChangesWithoutEvents.sol
│ │ │ ├── StateVariablesManipulation.sol
│ │ │ ├── StorageConditionals.sol
│ │ │ ├── StorageParameters.sol
│ │ │ ├── T11sTranferer.sol
│ │ │ ├── TautologicalCompare.sol
│ │ │ ├── TautologyOrContradiction.sol
│ │ │ ├── TestERC20.sol
│ │ │ ├── TransientKeyword.sol
│ │ │ ├── Trump.sol
│ │ │ ├── TxOriginUsedForAuth.sol
│ │ │ ├── U2.sol
│ │ │ ├── U3.sol
│ │ │ ├── U4.sol
│ │ │ ├── U5.sol
│ │ │ ├── UncheckedCalls.sol
│ │ │ ├── UncheckedReturn.sol
│ │ │ ├── UncheckedSend.sol
│ │ │ ├── UninitializedLocalVariables.sol
│ │ │ ├── UninitializedStateVariable.sol
│ │ │ ├── uniswap
│ │ │ │ ├── UniswapV2Swapper.sol
│ │ │ │ └── UniswapV3Swapper.sol
│ │ │ ├── UnprotectedInitialize.sol
│ │ │ ├── UnsafeERC721Mint.sol
│ │ │ ├── UnusedError.sol
│ │ │ ├── UnusedImport.sol
│ │ │ ├── UnusedStateVariables.sol
│ │ │ ├── UsingSelfdestruct.sol
│ │ │ ├── VoidConstructor.sol
│ │ │ ├── WeakRandomness.sol
│ │ │ ├── WrongOrderOfLayout.sol
│ │ │ ├── YulReturn.sol
│ │ │ └── ZeroAddressCheck.sol
│ │ └── test
│ │ └── Counter.t.sol
│ ├── foundry-nft-f23
│ │ ├── .github
│ │ │ └── workflows
│ │ │ └── test.yml
│ │ ├── .gitignore
│ │ ├── foundry.lock
│ │ ├── foundry.toml
│ │ ├── README.md
│ │ ├── remappings.txt
│ │ └── src
│ │ ├── BasicNft.sol
│ │ ├── F1.sol
│ │ ├── F2.sol
│ │ ├── Initializer.sol
│ │ └── inner-core-modules
│ │ └── ICM.sol
│ ├── foundry-nft-f23-icm
│ │ ├── .github
│ │ │ └── workflows
│ │ │ └── test.yml
│ │ ├── .gitignore
│ │ ├── aderyn.toml
│ │ ├── foundry.toml
│ │ ├── README.md
│ │ ├── remappings.txt
│ │ └── src
│ │ ├── BasicNft.sol
│ │ ├── F1.sol
│ │ ├── F2.sol
│ │ ├── Initializer.sol
│ │ └── inner-core-modules
│ │ └── ICM.sol
│ ├── hardhat-js-playground
│ │ ├── .gitignore
│ │ ├── artifacts
│ │ │ ├── build-info
│ │ │ │ └── cee6fe9a9a2f03f7ff10a27ab2746af6.json
│ │ │ └── contracts
│ │ │ ├── Counter.sol
│ │ │ │ ├── Counter.dbg.json
│ │ │ │ └── Counter.json
│ │ │ ├── ExtendedInheritance.sol
│ │ │ │ ├── ExtendedInheritance.dbg.json
│ │ │ │ └── ExtendedInheritance.json
│ │ │ ├── IContractInheritance.sol
│ │ │ │ ├── IContractInheritance.dbg.json
│ │ │ │ └── IContractInheritance.json
│ │ │ ├── InheritanceBase.sol
│ │ │ │ ├── InheritanceBase.dbg.json
│ │ │ │ └── InheritanceBase.json
│ │ │ ├── KeccakContract.sol
│ │ │ │ ├── KeccakContract.dbg.json
│ │ │ │ └── KeccakContract.json
│ │ │ ├── Lock.sol
│ │ │ │ ├── Lock.dbg.json
│ │ │ │ └── Lock.json
│ │ │ └── StateVariables.sol
│ │ │ ├── StateVariables.dbg.json
│ │ │ └── StateVariables.json
│ │ ├── contracts
│ │ │ ├── Counter.sol
│ │ │ ├── ExtendedInheritance.sol
│ │ │ ├── IContractInheritance.sol
│ │ │ ├── InheritanceBase.sol
│ │ │ ├── KeccakContract.sol
│ │ │ ├── Lock.sol
│ │ │ └── StateVariables.sol
│ │ ├── hardhat.config.js
│ │ ├── package.json
│ │ ├── README.md
│ │ ├── scripts
│ │ │ └── deploy.js
│ │ ├── test
│ │ │ └── Lock.js
│ │ └── yarn.lock
│ ├── no-sol-files
│ │ ├── extra
│ │ │ └── HelloAgain.md
│ │ ├── Hello.txt
│ │ └── Hello.yul
│ └── toml
│ ├── nested_project1
│ │ ├── aderyn.toml
│ │ ├── folder1
│ │ │ └── hardhat.config.ts
│ │ ├── folder2
│ │ │ └── hardhat.config.ts
│ │ └── folder3
│ │ └── file.txt
│ └── nested_project2
│ ├── aderyn.toml
│ ├── folder1
│ │ └── foundry.toml
│ └── folder2
│ └── file1.txt
├── tools
│ └── xtask
│ ├── Cargo.toml
│ └── src
│ ├── blesspr.rs
│ ├── cut_release.rs
│ ├── flags.rs
│ ├── main.rs
│ ├── reportgen.rs
│ └── tomlgen.rs
└── typos.toml
```
# Files
--------------------------------------------------------------------------------
/aderyn/src/main.rs:
--------------------------------------------------------------------------------
```rust
1 | use aderyn::{
2 | aderyn_is_currently_running_newest_version, birdsong,
3 | completions::SupportedShellsForCompletions,
4 | create_aderyn_toml_file_at, initialize_niceties,
5 | lsp::spin_up_language_server,
6 | mcp::{spin_up_http_stream_mcp_server, spin_up_stdio_mcp_server},
7 | print_all_detectors_view, print_detail_view,
8 | };
9 | use aderyn_driver::driver::{self, Args, kick_off_report_creation};
10 | use clap::{ArgGroup, CommandFactory, Parser, Subcommand, ValueHint};
11 | use clap_complete::{Shell, generate};
12 | use indoc::indoc;
13 | use std::path::PathBuf;
14 |
15 | #[derive(Parser, Debug)]
16 | #[command(
17 | author,
18 | version,
19 | about = indoc!{
20 | r#"Aderyn - Rust based Solidity Static analyzer.
21 |
22 | Quickstart:
23 | cd my-solidity-project/
24 | aderyn
25 |
26 | It outputs report.md if the solidity project is foundry/hardhat/soldeer.
27 |
28 | In the case that it's not, it's important to create a config file via the
29 | command `aderyn init` in the workspace root.
30 |
31 | For more examples, visit docs: https://cyfrin.gitbook.io/cyfrin-docs/aderyn-cli
32 | Also ask questions via command line: `aderyn docs "how to configure scan options?"`
33 |
34 | Help Aderyn stay open source by giving us a star on Github.
35 | Repository: https://github.com/cyfrin/aderyn
36 | "#},
37 | group(ArgGroup::new("stdout_dependent").requires("stdout")),
38 | )]
39 | pub struct CommandLineArgs {
40 | /// Commands to initialize a config file and docs help
41 | #[clap(subcommand)]
42 | subcommand: Option<MainSubcommand>,
43 |
44 | /// Solidity project root directory
45 | #[arg(default_value = ".", value_hint = ValueHint::DirPath)]
46 | root: String,
47 |
48 | /// Path to the contracts source directory (relative to the root)
49 | /// By default, it is auto detected in most projects.
50 | #[arg(short, long, use_value_delimiter = true, verbatim_doc_comment, value_hint = ValueHint::DirPath)]
51 | src: Option<String>,
52 |
53 | /// List of path fragments to include, delimited by comma (no spaces)
54 | /// By default, it is auto detected.
55 | ///
56 | /// Use this to include only specified source files in the analysis:
57 | /// Examples:
58 | /// -i src/MyContract.sol
59 | /// -i src/MyContract.sol,src/MyOtherContract.sol
60 | #[arg(short = 'i', long, use_value_delimiter = true, verbatim_doc_comment, value_hint = ValueHint::Other)]
61 | path_includes: Option<Vec<String>>,
62 |
63 | /// List of path fragments to exclude, delimited by comma (no spaces)
64 | /// By default, it is auto detected.
65 | ///
66 | /// Use this to exclude only specified source files in the analysis:
67 | /// Examples:
68 | /// -x src/MyContract.sol
69 | /// -x src/MyContract.sol,src/MyOtherContract.sol
70 | #[arg(short = 'x', long, use_value_delimiter = true, verbatim_doc_comment, value_hint = ValueHint::Other)]
71 | path_excludes: Option<Vec<String>>,
72 |
73 | /// Desired file path for the final report
74 | /// Output file extension (.json/.md/.sarif) decides the format.
75 | ///
76 | /// NOTE: Allowed formats: JSON, Markdown, Sarif
77 | /// NOTE: Overwrites existing file if found in the same path.
78 | #[arg(short, long, default_value = "report.md", verbatim_doc_comment, value_hint = ValueHint::FilePath)]
79 | output: String,
80 |
81 | /// Start Aderyn's LSP server on stdout. (Must be accompanied with `--stdout`)
82 | #[arg(short, long, group = "stdout_dependent")]
83 | lsp: bool,
84 |
85 | /// Only use the high detectors
86 | #[arg(long)]
87 | highs_only: bool,
88 |
89 | /// After generating report, skip checking if a new version of Aderyn is available.
90 | #[arg(long)]
91 | skip_update_check: bool,
92 |
93 | // ---------- Hidden arguments --------------- //
94 | /// Serialize the reports to stdout, don't write to files.
95 | #[arg(long, name = "stdout", hide = true)]
96 | stdout: bool,
97 |
98 | /// Skip counting number of lines of code.
99 | #[arg(long, hide = true)]
100 | skip_cloc: bool,
101 |
102 | /// Run in Auditor mode, which only outputs manual audit helpers
103 | #[arg(long, hide = true)]
104 | auditor_mode: bool,
105 |
106 | /// Do not include code snippets in the report (reduces markdown report size in large repos)
107 | #[arg(long, hide = true)]
108 | no_snippets: bool,
109 | }
110 |
111 | #[derive(Debug, Subcommand)]
112 | enum MainSubcommand {
113 | /// Browse detector registry
114 | Registry {
115 | /// all - View all available detectors
116 | ///
117 | /// <name> - Detail view of a single detector
118 | #[arg(default_value = "all", verbatim_doc_comment)]
119 | detector: String,
120 | },
121 | /// Generate shell completion scripts
122 | Completions {
123 | /// Shell to generate completions for
124 | #[arg(value_enum)]
125 | shell: SupportedShellsForCompletions,
126 | },
127 | /// Initializes aderyn.toml. Required when solidity project root is not the workspace root
128 | Init {
129 | /// Optional path inside root where aderyn.toml will be created
130 | #[arg(value_hint = ValueHint::DirPath)]
131 | path: Option<String>,
132 | },
133 | /// Browse Aderyn documentation
134 | /// Chat with AI for help - aderyn docs "how to exclude files from scan?"
135 | Docs {
136 | /// Ask question
137 | question: Option<String>,
138 | },
139 | /// ⚠️ [BETA] Start an MCP server in the project root
140 | Mcp {
141 | #[command(subcommand)]
142 | transport: McpTransport,
143 | },
144 | }
145 |
146 | #[derive(Debug, Subcommand)]
147 | enum McpTransport {
148 | /// Run MCP server over streamable HTTP
149 | HttpStream {
150 | /// Port to bind the MCP server on (defaults to 6277)
151 | #[arg(long, default_value_t = 6277)]
152 | port: u16,
153 | },
154 | /// Run MCP server over STDIO
155 | Stdio,
156 | }
157 |
158 | fn main() {
159 | initialize_niceties();
160 | let cmd_args = CommandLineArgs::parse();
161 |
162 | // Condense args
163 | let mut args = Args {
164 | input_config: driver::CliArgsInputConfig {
165 | root: cmd_args.root.clone(),
166 | src: cmd_args.src,
167 | path_excludes: cmd_args.path_excludes,
168 | path_includes: cmd_args.path_includes,
169 | },
170 | output_config: driver::CliArgsOutputConfig {
171 | output: cmd_args.output,
172 | stdout: cmd_args.stdout,
173 | no_snippets: cmd_args.no_snippets,
174 | },
175 | common_config: driver::CliArgsCommonConfig {
176 | verbose: {
177 | let is_running_lsp = cmd_args.lsp;
178 | let is_running_mcp = cmd_args
179 | .subcommand
180 | .as_ref()
181 | .is_some_and(|s| matches!(s, MainSubcommand::Mcp { transport: _ }));
182 | // In neither of those 2 cases, should aderyn be verbose enough to print metadata.
183 | !(is_running_lsp || is_running_mcp)
184 | },
185 | lsp: cmd_args.lsp,
186 | skip_cloc: cmd_args.skip_cloc,
187 | highs_only: cmd_args.highs_only,
188 | },
189 | };
190 |
191 | if let Some(subcommand) = cmd_args.subcommand {
192 | match subcommand {
193 | MainSubcommand::Registry { detector } => {
194 | if detector == "all" {
195 | print_all_detectors_view();
196 | } else {
197 | print_detail_view(&detector);
198 | }
199 | }
200 | MainSubcommand::Init { path } => {
201 | let creation_path = match path {
202 | Some(optional_path) => {
203 | let mut target_dir = PathBuf::from(&cmd_args.root);
204 | target_dir.push(optional_path);
205 |
206 | let can_initialize = target_dir.exists()
207 | && std::fs::metadata(&target_dir).is_ok_and(|p| p.is_dir());
208 |
209 | if !can_initialize {
210 | eprintln!("Failed to initialize aderyn.toml in non-existent directory");
211 | std::process::exit(1);
212 | }
213 |
214 | target_dir.to_string_lossy().to_string()
215 | }
216 | None => cmd_args.root,
217 | };
218 |
219 | // Create aderyn.toml at the target directory
220 | create_aderyn_toml_file_at(creation_path);
221 | }
222 | MainSubcommand::Docs { question } => {
223 | let url = match question {
224 | Some(question) => {
225 | let encoded_question = urlencoding::encode(&question);
226 | format!(
227 | "https://cyfrin.gitbook.io/cyfrin-docs/aderyn-cli/readme?q={}&ask=true",
228 | encoded_question
229 | )
230 | }
231 | None => "https://cyfrin.gitbook.io/cyfrin-docs/aderyn-cli".to_string(),
232 | };
233 |
234 | // First try opening the URL in browser, if it fails just print to stdout
235 | if webbrowser::open(&url).is_err() {
236 | println!("Visit {}", url);
237 | };
238 | }
239 | MainSubcommand::Mcp { transport } => {
240 | // FORCE skip cloc
241 | args.common_config.skip_cloc = true;
242 | match transport {
243 | McpTransport::HttpStream { port } => {
244 | spin_up_http_stream_mcp_server(args, port);
245 | }
246 | McpTransport::Stdio => {
247 | spin_up_stdio_mcp_server(args);
248 | }
249 | }
250 | }
251 | MainSubcommand::Completions { shell } => {
252 | let mut cmd = CommandLineArgs::command();
253 | let name = cmd.get_name().to_string();
254 | let clap_shell: Shell = shell.into();
255 | generate(clap_shell, &mut cmd, name, &mut std::io::stdout());
256 | return;
257 | }
258 | }
259 |
260 | return;
261 | }
262 |
263 | if cmd_args.auditor_mode {
264 | driver::kick_off_audit_mode(args.clone());
265 | } else {
266 | // Run watcher is watch mode is engaged
267 | if cmd_args.lsp {
268 | // FORCE skip cloc
269 | args.common_config.skip_cloc = true;
270 | spin_up_language_server(args);
271 | } else {
272 | kick_off_report_creation(args.clone());
273 | }
274 | }
275 |
276 | // Check for updates on non lsp mode
277 | if !cmd_args.lsp
278 | && !cmd_args.skip_update_check
279 | && let Some(yes) = aderyn_is_currently_running_newest_version()
280 | && !yes
281 | {
282 | println!();
283 | println!(
284 | "NEW VERSION OF ADERYN AVAILABLE! Please upgrade aderyn by following the instruction here - https://github.com/cyfrin/aderyn"
285 | );
286 | println!("NOTE: You can skip this check by passing --skip-update-check flag");
287 | }
288 |
289 | // Ask open source community for stars
290 | if !cmd_args.lsp {
291 | birdsong::print_last_words();
292 | }
293 | }
294 |
```
--------------------------------------------------------------------------------
/benchmarks/empty-block/report/index.html:
--------------------------------------------------------------------------------
```html
1 | <!DOCTYPE html>
2 | <html>
3 |
4 | <head>
5 | <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
6 | <title>empty-block - Criterion.rs</title>
7 | <style type="text/css">
8 | body {
9 | font: 14px Helvetica Neue;
10 | text-rendering: optimizelegibility;
11 | }
12 |
13 | .body {
14 | width: 960px;
15 | margin: auto;
16 | }
17 |
18 | th {
19 | font-weight: 200
20 | }
21 |
22 | th,
23 | td {
24 | padding-right: 3px;
25 | padding-bottom: 3px;
26 | }
27 |
28 | a:link {
29 | color: #1F78B4;
30 | text-decoration: none;
31 | }
32 |
33 | th.ci-bound {
34 | opacity: 0.6
35 | }
36 |
37 | td.ci-bound {
38 | opacity: 0.5
39 | }
40 |
41 | .stats {
42 | width: 80%;
43 | margin: auto;
44 | display: flex;
45 | }
46 |
47 | .additional_stats {
48 | flex: 0 0 60%
49 | }
50 |
51 | .additional_plots {
52 | flex: 1
53 | }
54 |
55 | h2 {
56 | font-size: 36px;
57 | font-weight: 300;
58 | }
59 |
60 | h3 {
61 | font-size: 24px;
62 | font-weight: 300;
63 | }
64 |
65 | #footer {
66 | height: 40px;
67 | background: #888;
68 | color: white;
69 | font-size: larger;
70 | font-weight: 300;
71 | }
72 |
73 | #footer a {
74 | color: white;
75 | text-decoration: underline;
76 | }
77 |
78 | #footer p {
79 | text-align: center
80 | }
81 | </style>
82 | </head>
83 |
84 | <body>
85 | <div class="body">
86 | <h2>empty-block</h2>
87 | <div class="absolute">
88 | <section class="plots">
89 | <table width="100%">
90 | <tbody>
91 | <tr>
92 | <td>
93 | <a href="pdf.svg">
94 | <img src="pdf_small.svg" alt="PDF of Slope" width="450" height="300" />
95 | </a>
96 | </td>
97 | <td>
98 | <a href="regression.svg">
99 | <img src="regression_small.svg" alt="Regression" width="450" height="300" />
100 | </a>
101 | </td>
102 | </tr>
103 | </tbody>
104 | </table>
105 | </section>
106 | <section class="stats">
107 | <div class="additional_stats">
108 | <h4>Additional Statistics:</h4>
109 | <table>
110 | <thead>
111 | <tr>
112 | <th></th>
113 | <th title="0.95 confidence level" class="ci-bound">Lower bound</th>
114 | <th>Estimate</th>
115 | <th title="0.95 confidence level" class="ci-bound">Upper bound</th>
116 | </tr>
117 | </thead>
118 | <tbody>
119 | <tr>
120 | <td>Slope</td>
121 | <td class="ci-bound">49.275 µs</td>
122 | <td>49.544 µs</td>
123 | <td class="ci-bound">49.852 µs</td>
124 | </tr>
125 | <tr>
126 | <td>R²</td>
127 | <td class="ci-bound">0.9120057</td>
128 | <td>0.9159055</td>
129 | <td class="ci-bound">0.9107683</td>
130 | </tr>
131 | <tr>
132 | <td>Mean</td>
133 | <td class="ci-bound">50.533 µs</td>
134 | <td>50.946 µs</td>
135 | <td class="ci-bound">51.450 µs</td>
136 | </tr>
137 | <tr>
138 | <td title="Standard Deviation">Std. Dev.</td>
139 | <td class="ci-bound">1.3775 µs</td>
140 | <td>2.3764 µs</td>
141 | <td class="ci-bound">3.5064 µs</td>
142 | </tr>
143 | <tr>
144 | <td>Median</td>
145 | <td class="ci-bound">50.730 µs</td>
146 | <td>50.844 µs</td>
147 | <td class="ci-bound">51.335 µs</td>
148 | </tr>
149 | <tr>
150 | <td title="Median Absolute Deviation">MAD</td>
151 | <td class="ci-bound">1.0342 µs</td>
152 | <td>1.6954 µs</td>
153 | <td class="ci-bound">1.9058 µs</td>
154 | </tr>
155 | </tbody>
156 | </table>
157 | </div>
158 | <div class="additional_plots">
159 | <h4>Additional Plots:</h4>
160 | <ul>
161 |
162 | <li>
163 | <a href="typical.svg">Typical</a>
164 | </li>
165 | <li>
166 | <a href="mean.svg">Mean</a>
167 | </li>
168 | <li>
169 | <a href="SD.svg">Std. Dev.</a>
170 | </li>
171 | <li>
172 | <a href="median.svg">Median</a>
173 | </li>
174 | <li>
175 | <a href="MAD.svg">MAD</a>
176 | </li>
177 | <li>
178 | <a href="slope.svg">Slope</a>
179 | </li>
180 | </ul>
181 | </div>
182 | </section>
183 | <section class="explanation">
184 | <h4>Understanding this report:</h4>
185 | <p>The plot on the left displays the average time per iteration for this benchmark. The shaded region
186 | shows the estimated probability of an iteration taking a certain amount of time, while the line
187 | shows the mean. Click on the plot for a larger view showing the outliers.</p>
188 | <p>The plot on the right shows the linear regression calculated from the measurements. Each point
189 | represents a sample, though here it shows the total time for the sample rather than time per
190 | iteration. The line is the line of best fit for these measurements.</p>
191 | <p>See <a href="https://bheisler.github.io/criterion.rs/book/user_guide/command_line_output.html#additional-statistics">the
192 | documentation</a> for more details on the additional statistics.</p>
193 | </section>
194 | </div>
195 | <section class="plots">
196 | <h3>Change Since Previous Benchmark</h3>
197 | <div class="relative">
198 | <table width="100%">
199 | <tbody>
200 | <tr>
201 | <td>
202 | <a href="both/pdf.svg">
203 | <img src="relative_pdf_small.svg" alt="PDF Comparison" width="450"
204 | height="300" />
205 | </a>
206 | </td>
207 | <td>
208 | <a href="both/regression.svg">
209 | <img src="relative_regression_small.svg" alt="Regression Comparison" width="450"
210 | height="300" />
211 | </a>
212 | </td>
213 | </tr>
214 | </tbody>
215 | </table>
216 | </div>
217 | </section>
218 | <section class="stats">
219 | <div class="additional_stats">
220 | <h4>Additional Statistics:</h4>
221 | <table>
222 | <thead>
223 | <tr>
224 | <th></th>
225 | <th title="0.95 confidence level" class="ci-bound">Lower bound</th>
226 | <th>Estimate</th>
227 | <th title="0.95 confidence level" class="ci-bound">Upper bound</th>
228 | <th></th>
229 | </tr>
230 | </thead>
231 | <tbody>
232 | <tr>
233 | <td>Change in time</td>
234 | <td class="ci-bound">-13.014%</td>
235 | <td>-11.424%</td>
236 | <td class="ci-bound">-9.9095%</td>
237 | <td>(p = 0.00 <
238 | 0.05)</td>
239 | </tr>
240 | </tbody>
241 | </table>
242 | Performance has improved.
243 | </div>
244 | <div class="additional_plots">
245 | <h4>Additional Plots:</h4>
246 | <ul>
247 |
248 | <li>
249 | <a href="change/mean.svg">Change in mean</a>
250 | </li>
251 | <li>
252 | <a href="change/median.svg">Change in median</a>
253 | </li>
254 | <li>
255 | <a href="change/t-test.svg">T-Test</a>
256 | </li>
257 | </ul>
258 | </div>
259 | </section>
260 | <section class="explanation">
261 | <h4>Understanding this report:</h4>
262 | <p>The plot on the left shows the probability of the function taking a certain amount of time. The red
263 | curve represents the saved measurements from the last time this benchmark was run, while the blue curve
264 | shows the measurements from this run. The lines represent the mean time per iteration. Click on the
265 | plot for a larger view.</p>
266 | <p>The plot on the right shows the two regressions. Again, the red line represents the previous measurement
267 | while the blue line shows the current measurement.</p>
268 | <p>See <a href="https://bheisler.github.io/criterion.rs/book/user_guide/command_line_output.html#change">the
269 | documentation</a> for more details on the additional statistics.</p>
270 | </section>
271 | </div>
272 | <div id="footer">
273 | <p>This report was generated by
274 | <a href="https://github.com/bheisler/criterion.rs">Criterion.rs</a>, a statistics-driven benchmarking
275 | library in Rust.</p>
276 | </div>
277 | </body>
278 |
279 | </html>
```
--------------------------------------------------------------------------------
/benchmarks/ecrecover/report/index.html:
--------------------------------------------------------------------------------
```html
1 | <!DOCTYPE html>
2 | <html>
3 |
4 | <head>
5 | <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
6 | <title>ecrecover - Criterion.rs</title>
7 | <style type="text/css">
8 | body {
9 | font: 14px Helvetica Neue;
10 | text-rendering: optimizelegibility;
11 | }
12 |
13 | .body {
14 | width: 960px;
15 | margin: auto;
16 | }
17 |
18 | th {
19 | font-weight: 200
20 | }
21 |
22 | th,
23 | td {
24 | padding-right: 3px;
25 | padding-bottom: 3px;
26 | }
27 |
28 | a:link {
29 | color: #1F78B4;
30 | text-decoration: none;
31 | }
32 |
33 | th.ci-bound {
34 | opacity: 0.6
35 | }
36 |
37 | td.ci-bound {
38 | opacity: 0.5
39 | }
40 |
41 | .stats {
42 | width: 80%;
43 | margin: auto;
44 | display: flex;
45 | }
46 |
47 | .additional_stats {
48 | flex: 0 0 60%
49 | }
50 |
51 | .additional_plots {
52 | flex: 1
53 | }
54 |
55 | h2 {
56 | font-size: 36px;
57 | font-weight: 300;
58 | }
59 |
60 | h3 {
61 | font-size: 24px;
62 | font-weight: 300;
63 | }
64 |
65 | #footer {
66 | height: 40px;
67 | background: #888;
68 | color: white;
69 | font-size: larger;
70 | font-weight: 300;
71 | }
72 |
73 | #footer a {
74 | color: white;
75 | text-decoration: underline;
76 | }
77 |
78 | #footer p {
79 | text-align: center
80 | }
81 | </style>
82 | </head>
83 |
84 | <body>
85 | <div class="body">
86 | <h2>ecrecover</h2>
87 | <div class="absolute">
88 | <section class="plots">
89 | <table width="100%">
90 | <tbody>
91 | <tr>
92 | <td>
93 | <a href="pdf.svg">
94 | <img src="pdf_small.svg" alt="PDF of Slope" width="450" height="300" />
95 | </a>
96 | </td>
97 | <td>
98 | <a href="regression.svg">
99 | <img src="regression_small.svg" alt="Regression" width="450" height="300" />
100 | </a>
101 | </td>
102 | </tr>
103 | </tbody>
104 | </table>
105 | </section>
106 | <section class="stats">
107 | <div class="additional_stats">
108 | <h4>Additional Statistics:</h4>
109 | <table>
110 | <thead>
111 | <tr>
112 | <th></th>
113 | <th title="0.95 confidence level" class="ci-bound">Lower bound</th>
114 | <th>Estimate</th>
115 | <th title="0.95 confidence level" class="ci-bound">Upper bound</th>
116 | </tr>
117 | </thead>
118 | <tbody>
119 | <tr>
120 | <td>Slope</td>
121 | <td class="ci-bound">5.1394 µs</td>
122 | <td>5.3891 µs</td>
123 | <td class="ci-bound">5.7963 µs</td>
124 | </tr>
125 | <tr>
126 | <td>R²</td>
127 | <td class="ci-bound">0.1109766</td>
128 | <td>0.1155248</td>
129 | <td class="ci-bound">0.1041705</td>
130 | </tr>
131 | <tr>
132 | <td>Mean</td>
133 | <td class="ci-bound">5.0502 µs</td>
134 | <td>5.1764 µs</td>
135 | <td class="ci-bound">5.3579 µs</td>
136 | </tr>
137 | <tr>
138 | <td title="Standard Deviation">Std. Dev.</td>
139 | <td class="ci-bound">211.88 ns</td>
140 | <td>807.83 ns</td>
141 | <td class="ci-bound">1.2969 µs</td>
142 | </tr>
143 | <tr>
144 | <td>Median</td>
145 | <td class="ci-bound">4.9804 µs</td>
146 | <td>5.0636 µs</td>
147 | <td class="ci-bound">5.1134 µs</td>
148 | </tr>
149 | <tr>
150 | <td title="Median Absolute Deviation">MAD</td>
151 | <td class="ci-bound">165.79 ns</td>
152 | <td>226.26 ns</td>
153 | <td class="ci-bound">282.03 ns</td>
154 | </tr>
155 | </tbody>
156 | </table>
157 | </div>
158 | <div class="additional_plots">
159 | <h4>Additional Plots:</h4>
160 | <ul>
161 |
162 | <li>
163 | <a href="typical.svg">Typical</a>
164 | </li>
165 | <li>
166 | <a href="mean.svg">Mean</a>
167 | </li>
168 | <li>
169 | <a href="SD.svg">Std. Dev.</a>
170 | </li>
171 | <li>
172 | <a href="median.svg">Median</a>
173 | </li>
174 | <li>
175 | <a href="MAD.svg">MAD</a>
176 | </li>
177 | <li>
178 | <a href="slope.svg">Slope</a>
179 | </li>
180 | </ul>
181 | </div>
182 | </section>
183 | <section class="explanation">
184 | <h4>Understanding this report:</h4>
185 | <p>The plot on the left displays the average time per iteration for this benchmark. The shaded region
186 | shows the estimated probability of an iteration taking a certain amount of time, while the line
187 | shows the mean. Click on the plot for a larger view showing the outliers.</p>
188 | <p>The plot on the right shows the linear regression calculated from the measurements. Each point
189 | represents a sample, though here it shows the total time for the sample rather than time per
190 | iteration. The line is the line of best fit for these measurements.</p>
191 | <p>See <a href="https://bheisler.github.io/criterion.rs/book/user_guide/command_line_output.html#additional-statistics">the
192 | documentation</a> for more details on the additional statistics.</p>
193 | </section>
194 | </div>
195 | <section class="plots">
196 | <h3>Change Since Previous Benchmark</h3>
197 | <div class="relative">
198 | <table width="100%">
199 | <tbody>
200 | <tr>
201 | <td>
202 | <a href="both/pdf.svg">
203 | <img src="relative_pdf_small.svg" alt="PDF Comparison" width="450"
204 | height="300" />
205 | </a>
206 | </td>
207 | <td>
208 | <a href="both/regression.svg">
209 | <img src="relative_regression_small.svg" alt="Regression Comparison" width="450"
210 | height="300" />
211 | </a>
212 | </td>
213 | </tr>
214 | </tbody>
215 | </table>
216 | </div>
217 | </section>
218 | <section class="stats">
219 | <div class="additional_stats">
220 | <h4>Additional Statistics:</h4>
221 | <table>
222 | <thead>
223 | <tr>
224 | <th></th>
225 | <th title="0.95 confidence level" class="ci-bound">Lower bound</th>
226 | <th>Estimate</th>
227 | <th title="0.95 confidence level" class="ci-bound">Upper bound</th>
228 | <th></th>
229 | </tr>
230 | </thead>
231 | <tbody>
232 | <tr>
233 | <td>Change in time</td>
234 | <td class="ci-bound">-3.8641%</td>
235 | <td>-0.8889%</td>
236 | <td class="ci-bound">+3.0760%</td>
237 | <td>(p = 0.64 >
238 | 0.05)</td>
239 | </tr>
240 | </tbody>
241 | </table>
242 | No change in performance detected.
243 | </div>
244 | <div class="additional_plots">
245 | <h4>Additional Plots:</h4>
246 | <ul>
247 |
248 | <li>
249 | <a href="change/mean.svg">Change in mean</a>
250 | </li>
251 | <li>
252 | <a href="change/median.svg">Change in median</a>
253 | </li>
254 | <li>
255 | <a href="change/t-test.svg">T-Test</a>
256 | </li>
257 | </ul>
258 | </div>
259 | </section>
260 | <section class="explanation">
261 | <h4>Understanding this report:</h4>
262 | <p>The plot on the left shows the probability of the function taking a certain amount of time. The red
263 | curve represents the saved measurements from the last time this benchmark was run, while the blue curve
264 | shows the measurements from this run. The lines represent the mean time per iteration. Click on the
265 | plot for a larger view.</p>
266 | <p>The plot on the right shows the two regressions. Again, the red line represents the previous measurement
267 | while the blue line shows the current measurement.</p>
268 | <p>See <a href="https://bheisler.github.io/criterion.rs/book/user_guide/command_line_output.html#change">the
269 | documentation</a> for more details on the additional statistics.</p>
270 | </section>
271 | </div>
272 | <div id="footer">
273 | <p>This report was generated by
274 | <a href="https://github.com/bheisler/criterion.rs">Criterion.rs</a>, a statistics-driven benchmarking
275 | library in Rust.</p>
276 | </div>
277 | </body>
278 |
279 | </html>
```
--------------------------------------------------------------------------------
/benchmarks/push-zero-opcode/report/index.html:
--------------------------------------------------------------------------------
```html
1 | <!DOCTYPE html>
2 | <html>
3 |
4 | <head>
5 | <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
6 | <title>push-zero-opcode - Criterion.rs</title>
7 | <style type="text/css">
8 | body {
9 | font: 14px Helvetica Neue;
10 | text-rendering: optimizelegibility;
11 | }
12 |
13 | .body {
14 | width: 960px;
15 | margin: auto;
16 | }
17 |
18 | th {
19 | font-weight: 200
20 | }
21 |
22 | th,
23 | td {
24 | padding-right: 3px;
25 | padding-bottom: 3px;
26 | }
27 |
28 | a:link {
29 | color: #1F78B4;
30 | text-decoration: none;
31 | }
32 |
33 | th.ci-bound {
34 | opacity: 0.6
35 | }
36 |
37 | td.ci-bound {
38 | opacity: 0.5
39 | }
40 |
41 | .stats {
42 | width: 80%;
43 | margin: auto;
44 | display: flex;
45 | }
46 |
47 | .additional_stats {
48 | flex: 0 0 60%
49 | }
50 |
51 | .additional_plots {
52 | flex: 1
53 | }
54 |
55 | h2 {
56 | font-size: 36px;
57 | font-weight: 300;
58 | }
59 |
60 | h3 {
61 | font-size: 24px;
62 | font-weight: 300;
63 | }
64 |
65 | #footer {
66 | height: 40px;
67 | background: #888;
68 | color: white;
69 | font-size: larger;
70 | font-weight: 300;
71 | }
72 |
73 | #footer a {
74 | color: white;
75 | text-decoration: underline;
76 | }
77 |
78 | #footer p {
79 | text-align: center
80 | }
81 | </style>
82 | </head>
83 |
84 | <body>
85 | <div class="body">
86 | <h2>push-zero-opcode</h2>
87 | <div class="absolute">
88 | <section class="plots">
89 | <table width="100%">
90 | <tbody>
91 | <tr>
92 | <td>
93 | <a href="pdf.svg">
94 | <img src="pdf_small.svg" alt="PDF of Slope" width="450" height="300" />
95 | </a>
96 | </td>
97 | <td>
98 | <a href="regression.svg">
99 | <img src="regression_small.svg" alt="Regression" width="450" height="300" />
100 | </a>
101 | </td>
102 | </tr>
103 | </tbody>
104 | </table>
105 | </section>
106 | <section class="stats">
107 | <div class="additional_stats">
108 | <h4>Additional Statistics:</h4>
109 | <table>
110 | <thead>
111 | <tr>
112 | <th></th>
113 | <th title="0.95 confidence level" class="ci-bound">Lower bound</th>
114 | <th>Estimate</th>
115 | <th title="0.95 confidence level" class="ci-bound">Upper bound</th>
116 | </tr>
117 | </thead>
118 | <tbody>
119 | <tr>
120 | <td>Slope</td>
121 | <td class="ci-bound">41.304 µs</td>
122 | <td>42.279 µs</td>
123 | <td class="ci-bound">43.672 µs</td>
124 | </tr>
125 | <tr>
126 | <td>R²</td>
127 | <td class="ci-bound">0.4582522</td>
128 | <td>0.4741685</td>
129 | <td class="ci-bound">0.4428075</td>
130 | </tr>
131 | <tr>
132 | <td>Mean</td>
133 | <td class="ci-bound">42.614 µs</td>
134 | <td>43.116 µs</td>
135 | <td class="ci-bound">43.714 µs</td>
136 | </tr>
137 | <tr>
138 | <td title="Standard Deviation">Std. Dev.</td>
139 | <td class="ci-bound">1.6200 µs</td>
140 | <td>2.8210 µs</td>
141 | <td class="ci-bound">3.9401 µs</td>
142 | </tr>
143 | <tr>
144 | <td>Median</td>
145 | <td class="ci-bound">41.957 µs</td>
146 | <td>43.006 µs</td>
147 | <td class="ci-bound">43.444 µs</td>
148 | </tr>
149 | <tr>
150 | <td title="Median Absolute Deviation">MAD</td>
151 | <td class="ci-bound">1.4291 µs</td>
152 | <td>1.7916 µs</td>
153 | <td class="ci-bound">2.3147 µs</td>
154 | </tr>
155 | </tbody>
156 | </table>
157 | </div>
158 | <div class="additional_plots">
159 | <h4>Additional Plots:</h4>
160 | <ul>
161 |
162 | <li>
163 | <a href="typical.svg">Typical</a>
164 | </li>
165 | <li>
166 | <a href="mean.svg">Mean</a>
167 | </li>
168 | <li>
169 | <a href="SD.svg">Std. Dev.</a>
170 | </li>
171 | <li>
172 | <a href="median.svg">Median</a>
173 | </li>
174 | <li>
175 | <a href="MAD.svg">MAD</a>
176 | </li>
177 | <li>
178 | <a href="slope.svg">Slope</a>
179 | </li>
180 | </ul>
181 | </div>
182 | </section>
183 | <section class="explanation">
184 | <h4>Understanding this report:</h4>
185 | <p>The plot on the left displays the average time per iteration for this benchmark. The shaded region
186 | shows the estimated probability of an iteration taking a certain amount of time, while the line
187 | shows the mean. Click on the plot for a larger view showing the outliers.</p>
188 | <p>The plot on the right shows the linear regression calculated from the measurements. Each point
189 | represents a sample, though here it shows the total time for the sample rather than time per
190 | iteration. The line is the line of best fit for these measurements.</p>
191 | <p>See <a href="https://bheisler.github.io/criterion.rs/book/user_guide/command_line_output.html#additional-statistics">the
192 | documentation</a> for more details on the additional statistics.</p>
193 | </section>
194 | </div>
195 | <section class="plots">
196 | <h3>Change Since Previous Benchmark</h3>
197 | <div class="relative">
198 | <table width="100%">
199 | <tbody>
200 | <tr>
201 | <td>
202 | <a href="both/pdf.svg">
203 | <img src="relative_pdf_small.svg" alt="PDF Comparison" width="450"
204 | height="300" />
205 | </a>
206 | </td>
207 | <td>
208 | <a href="both/regression.svg">
209 | <img src="relative_regression_small.svg" alt="Regression Comparison" width="450"
210 | height="300" />
211 | </a>
212 | </td>
213 | </tr>
214 | </tbody>
215 | </table>
216 | </div>
217 | </section>
218 | <section class="stats">
219 | <div class="additional_stats">
220 | <h4>Additional Statistics:</h4>
221 | <table>
222 | <thead>
223 | <tr>
224 | <th></th>
225 | <th title="0.95 confidence level" class="ci-bound">Lower bound</th>
226 | <th>Estimate</th>
227 | <th title="0.95 confidence level" class="ci-bound">Upper bound</th>
228 | <th></th>
229 | </tr>
230 | </thead>
231 | <tbody>
232 | <tr>
233 | <td>Change in time</td>
234 | <td class="ci-bound">-15.031%</td>
235 | <td>-12.566%</td>
236 | <td class="ci-bound">-10.291%</td>
237 | <td>(p = 0.00 <
238 | 0.05)</td>
239 | </tr>
240 | </tbody>
241 | </table>
242 | Performance has improved.
243 | </div>
244 | <div class="additional_plots">
245 | <h4>Additional Plots:</h4>
246 | <ul>
247 |
248 | <li>
249 | <a href="change/mean.svg">Change in mean</a>
250 | </li>
251 | <li>
252 | <a href="change/median.svg">Change in median</a>
253 | </li>
254 | <li>
255 | <a href="change/t-test.svg">T-Test</a>
256 | </li>
257 | </ul>
258 | </div>
259 | </section>
260 | <section class="explanation">
261 | <h4>Understanding this report:</h4>
262 | <p>The plot on the left shows the probability of the function taking a certain amount of time. The red
263 | curve represents the saved measurements from the last time this benchmark was run, while the blue curve
264 | shows the measurements from this run. The lines represent the mean time per iteration. Click on the
265 | plot for a larger view.</p>
266 | <p>The plot on the right shows the two regressions. Again, the red line represents the previous measurement
267 | while the blue line shows the current measurement.</p>
268 | <p>See <a href="https://bheisler.github.io/criterion.rs/book/user_guide/command_line_output.html#change">the
269 | documentation</a> for more details on the additional statistics.</p>
270 | </section>
271 | </div>
272 | <div id="footer">
273 | <p>This report was generated by
274 | <a href="https://github.com/bheisler/criterion.rs">Criterion.rs</a>, a statistics-driven benchmarking
275 | library in Rust.</p>
276 | </div>
277 | </body>
278 |
279 | </html>
```
--------------------------------------------------------------------------------
/benchmarks/useless-modifier/report/index.html:
--------------------------------------------------------------------------------
```html
1 | <!DOCTYPE html>
2 | <html>
3 |
4 | <head>
5 | <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
6 | <title>useless-modifier - Criterion.rs</title>
7 | <style type="text/css">
8 | body {
9 | font: 14px Helvetica Neue;
10 | text-rendering: optimizelegibility;
11 | }
12 |
13 | .body {
14 | width: 960px;
15 | margin: auto;
16 | }
17 |
18 | th {
19 | font-weight: 200
20 | }
21 |
22 | th,
23 | td {
24 | padding-right: 3px;
25 | padding-bottom: 3px;
26 | }
27 |
28 | a:link {
29 | color: #1F78B4;
30 | text-decoration: none;
31 | }
32 |
33 | th.ci-bound {
34 | opacity: 0.6
35 | }
36 |
37 | td.ci-bound {
38 | opacity: 0.5
39 | }
40 |
41 | .stats {
42 | width: 80%;
43 | margin: auto;
44 | display: flex;
45 | }
46 |
47 | .additional_stats {
48 | flex: 0 0 60%
49 | }
50 |
51 | .additional_plots {
52 | flex: 1
53 | }
54 |
55 | h2 {
56 | font-size: 36px;
57 | font-weight: 300;
58 | }
59 |
60 | h3 {
61 | font-size: 24px;
62 | font-weight: 300;
63 | }
64 |
65 | #footer {
66 | height: 40px;
67 | background: #888;
68 | color: white;
69 | font-size: larger;
70 | font-weight: 300;
71 | }
72 |
73 | #footer a {
74 | color: white;
75 | text-decoration: underline;
76 | }
77 |
78 | #footer p {
79 | text-align: center
80 | }
81 | </style>
82 | </head>
83 |
84 | <body>
85 | <div class="body">
86 | <h2>useless-modifier</h2>
87 | <div class="absolute">
88 | <section class="plots">
89 | <table width="100%">
90 | <tbody>
91 | <tr>
92 | <td>
93 | <a href="pdf.svg">
94 | <img src="pdf_small.svg" alt="PDF of Slope" width="450" height="300" />
95 | </a>
96 | </td>
97 | <td>
98 | <a href="regression.svg">
99 | <img src="regression_small.svg" alt="Regression" width="450" height="300" />
100 | </a>
101 | </td>
102 | </tr>
103 | </tbody>
104 | </table>
105 | </section>
106 | <section class="stats">
107 | <div class="additional_stats">
108 | <h4>Additional Statistics:</h4>
109 | <table>
110 | <thead>
111 | <tr>
112 | <th></th>
113 | <th title="0.95 confidence level" class="ci-bound">Lower bound</th>
114 | <th>Estimate</th>
115 | <th title="0.95 confidence level" class="ci-bound">Upper bound</th>
116 | </tr>
117 | </thead>
118 | <tbody>
119 | <tr>
120 | <td>Slope</td>
121 | <td class="ci-bound">24.183 µs</td>
122 | <td>24.338 µs</td>
123 | <td class="ci-bound">24.519 µs</td>
124 | </tr>
125 | <tr>
126 | <td>R²</td>
127 | <td class="ci-bound">0.8893117</td>
128 | <td>0.8940165</td>
129 | <td class="ci-bound">0.8876461</td>
130 | </tr>
131 | <tr>
132 | <td>Mean</td>
133 | <td class="ci-bound">24.890 µs</td>
134 | <td>25.116 µs</td>
135 | <td class="ci-bound">25.376 µs</td>
136 | </tr>
137 | <tr>
138 | <td title="Standard Deviation">Std. Dev.</td>
139 | <td class="ci-bound">826.10 ns</td>
140 | <td>1.2446 µs</td>
141 | <td class="ci-bound">1.7387 µs</td>
142 | </tr>
143 | <tr>
144 | <td>Median</td>
145 | <td class="ci-bound">24.919 µs</td>
146 | <td>25.071 µs</td>
147 | <td class="ci-bound">25.299 µs</td>
148 | </tr>
149 | <tr>
150 | <td title="Median Absolute Deviation">MAD</td>
151 | <td class="ci-bound">791.48 ns</td>
152 | <td>1.0698 µs</td>
153 | <td class="ci-bound">1.2179 µs</td>
154 | </tr>
155 | </tbody>
156 | </table>
157 | </div>
158 | <div class="additional_plots">
159 | <h4>Additional Plots:</h4>
160 | <ul>
161 |
162 | <li>
163 | <a href="typical.svg">Typical</a>
164 | </li>
165 | <li>
166 | <a href="mean.svg">Mean</a>
167 | </li>
168 | <li>
169 | <a href="SD.svg">Std. Dev.</a>
170 | </li>
171 | <li>
172 | <a href="median.svg">Median</a>
173 | </li>
174 | <li>
175 | <a href="MAD.svg">MAD</a>
176 | </li>
177 | <li>
178 | <a href="slope.svg">Slope</a>
179 | </li>
180 | </ul>
181 | </div>
182 | </section>
183 | <section class="explanation">
184 | <h4>Understanding this report:</h4>
185 | <p>The plot on the left displays the average time per iteration for this benchmark. The shaded region
186 | shows the estimated probability of an iteration taking a certain amount of time, while the line
187 | shows the mean. Click on the plot for a larger view showing the outliers.</p>
188 | <p>The plot on the right shows the linear regression calculated from the measurements. Each point
189 | represents a sample, though here it shows the total time for the sample rather than time per
190 | iteration. The line is the line of best fit for these measurements.</p>
191 | <p>See <a href="https://bheisler.github.io/criterion.rs/book/user_guide/command_line_output.html#additional-statistics">the
192 | documentation</a> for more details on the additional statistics.</p>
193 | </section>
194 | </div>
195 | <section class="plots">
196 | <h3>Change Since Previous Benchmark</h3>
197 | <div class="relative">
198 | <table width="100%">
199 | <tbody>
200 | <tr>
201 | <td>
202 | <a href="both/pdf.svg">
203 | <img src="relative_pdf_small.svg" alt="PDF Comparison" width="450"
204 | height="300" />
205 | </a>
206 | </td>
207 | <td>
208 | <a href="both/regression.svg">
209 | <img src="relative_regression_small.svg" alt="Regression Comparison" width="450"
210 | height="300" />
211 | </a>
212 | </td>
213 | </tr>
214 | </tbody>
215 | </table>
216 | </div>
217 | </section>
218 | <section class="stats">
219 | <div class="additional_stats">
220 | <h4>Additional Statistics:</h4>
221 | <table>
222 | <thead>
223 | <tr>
224 | <th></th>
225 | <th title="0.95 confidence level" class="ci-bound">Lower bound</th>
226 | <th>Estimate</th>
227 | <th title="0.95 confidence level" class="ci-bound">Upper bound</th>
228 | <th></th>
229 | </tr>
230 | </thead>
231 | <tbody>
232 | <tr>
233 | <td>Change in time</td>
234 | <td class="ci-bound">-24.667%</td>
235 | <td>-20.867%</td>
236 | <td class="ci-bound">-17.116%</td>
237 | <td>(p = 0.00 <
238 | 0.05)</td>
239 | </tr>
240 | </tbody>
241 | </table>
242 | Performance has improved.
243 | </div>
244 | <div class="additional_plots">
245 | <h4>Additional Plots:</h4>
246 | <ul>
247 |
248 | <li>
249 | <a href="change/mean.svg">Change in mean</a>
250 | </li>
251 | <li>
252 | <a href="change/median.svg">Change in median</a>
253 | </li>
254 | <li>
255 | <a href="change/t-test.svg">T-Test</a>
256 | </li>
257 | </ul>
258 | </div>
259 | </section>
260 | <section class="explanation">
261 | <h4>Understanding this report:</h4>
262 | <p>The plot on the left shows the probability of the function taking a certain amount of time. The red
263 | curve represents the saved measurements from the last time this benchmark was run, while the blue curve
264 | shows the measurements from this run. The lines represent the mean time per iteration. Click on the
265 | plot for a larger view.</p>
266 | <p>The plot on the right shows the two regressions. Again, the red line represents the previous measurement
267 | while the blue line shows the current measurement.</p>
268 | <p>See <a href="https://bheisler.github.io/criterion.rs/book/user_guide/command_line_output.html#change">the
269 | documentation</a> for more details on the additional statistics.</p>
270 | </section>
271 | </div>
272 | <div id="footer">
273 | <p>This report was generated by
274 | <a href="https://github.com/bheisler/criterion.rs">Criterion.rs</a>, a statistics-driven benchmarking
275 | library in Rust.</p>
276 | </div>
277 | </body>
278 |
279 | </html>
```
--------------------------------------------------------------------------------
/benchmarks/unindexed-events/report/index.html:
--------------------------------------------------------------------------------
```html
1 | <!DOCTYPE html>
2 | <html>
3 |
4 | <head>
5 | <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
6 | <title>unindexed-events - Criterion.rs</title>
7 | <style type="text/css">
8 | body {
9 | font: 14px Helvetica Neue;
10 | text-rendering: optimizelegibility;
11 | }
12 |
13 | .body {
14 | width: 960px;
15 | margin: auto;
16 | }
17 |
18 | th {
19 | font-weight: 200
20 | }
21 |
22 | th,
23 | td {
24 | padding-right: 3px;
25 | padding-bottom: 3px;
26 | }
27 |
28 | a:link {
29 | color: #1F78B4;
30 | text-decoration: none;
31 | }
32 |
33 | th.ci-bound {
34 | opacity: 0.6
35 | }
36 |
37 | td.ci-bound {
38 | opacity: 0.5
39 | }
40 |
41 | .stats {
42 | width: 80%;
43 | margin: auto;
44 | display: flex;
45 | }
46 |
47 | .additional_stats {
48 | flex: 0 0 60%
49 | }
50 |
51 | .additional_plots {
52 | flex: 1
53 | }
54 |
55 | h2 {
56 | font-size: 36px;
57 | font-weight: 300;
58 | }
59 |
60 | h3 {
61 | font-size: 24px;
62 | font-weight: 300;
63 | }
64 |
65 | #footer {
66 | height: 40px;
67 | background: #888;
68 | color: white;
69 | font-size: larger;
70 | font-weight: 300;
71 | }
72 |
73 | #footer a {
74 | color: white;
75 | text-decoration: underline;
76 | }
77 |
78 | #footer p {
79 | text-align: center
80 | }
81 | </style>
82 | </head>
83 |
84 | <body>
85 | <div class="body">
86 | <h2>unindexed-events</h2>
87 | <div class="absolute">
88 | <section class="plots">
89 | <table width="100%">
90 | <tbody>
91 | <tr>
92 | <td>
93 | <a href="pdf.svg">
94 | <img src="pdf_small.svg" alt="PDF of Slope" width="450" height="300" />
95 | </a>
96 | </td>
97 | <td>
98 | <a href="regression.svg">
99 | <img src="regression_small.svg" alt="Regression" width="450" height="300" />
100 | </a>
101 | </td>
102 | </tr>
103 | </tbody>
104 | </table>
105 | </section>
106 | <section class="stats">
107 | <div class="additional_stats">
108 | <h4>Additional Statistics:</h4>
109 | <table>
110 | <thead>
111 | <tr>
112 | <th></th>
113 | <th title="0.95 confidence level" class="ci-bound">Lower bound</th>
114 | <th>Estimate</th>
115 | <th title="0.95 confidence level" class="ci-bound">Upper bound</th>
116 | </tr>
117 | </thead>
118 | <tbody>
119 | <tr>
120 | <td>Slope</td>
121 | <td class="ci-bound">28.445 µs</td>
122 | <td>28.600 µs</td>
123 | <td class="ci-bound">28.766 µs</td>
124 | </tr>
125 | <tr>
126 | <td>R²</td>
127 | <td class="ci-bound">0.8837029</td>
128 | <td>0.8867175</td>
129 | <td class="ci-bound">0.8832776</td>
130 | </tr>
131 | <tr>
132 | <td>Mean</td>
133 | <td class="ci-bound">28.379 µs</td>
134 | <td>28.669 µs</td>
135 | <td class="ci-bound">29.004 µs</td>
136 | </tr>
137 | <tr>
138 | <td title="Standard Deviation">Std. Dev.</td>
139 | <td class="ci-bound">975.84 ns</td>
140 | <td>1.6043 µs</td>
141 | <td class="ci-bound">2.1426 µs</td>
142 | </tr>
143 | <tr>
144 | <td>Median</td>
145 | <td class="ci-bound">28.185 µs</td>
146 | <td>28.322 µs</td>
147 | <td class="ci-bound">28.400 µs</td>
148 | </tr>
149 | <tr>
150 | <td title="Median Absolute Deviation">MAD</td>
151 | <td class="ci-bound">455.97 ns</td>
152 | <td>606.32 ns</td>
153 | <td class="ci-bound">967.87 ns</td>
154 | </tr>
155 | </tbody>
156 | </table>
157 | </div>
158 | <div class="additional_plots">
159 | <h4>Additional Plots:</h4>
160 | <ul>
161 |
162 | <li>
163 | <a href="typical.svg">Typical</a>
164 | </li>
165 | <li>
166 | <a href="mean.svg">Mean</a>
167 | </li>
168 | <li>
169 | <a href="SD.svg">Std. Dev.</a>
170 | </li>
171 | <li>
172 | <a href="median.svg">Median</a>
173 | </li>
174 | <li>
175 | <a href="MAD.svg">MAD</a>
176 | </li>
177 | <li>
178 | <a href="slope.svg">Slope</a>
179 | </li>
180 | </ul>
181 | </div>
182 | </section>
183 | <section class="explanation">
184 | <h4>Understanding this report:</h4>
185 | <p>The plot on the left displays the average time per iteration for this benchmark. The shaded region
186 | shows the estimated probability of an iteration taking a certain amount of time, while the line
187 | shows the mean. Click on the plot for a larger view showing the outliers.</p>
188 | <p>The plot on the right shows the linear regression calculated from the measurements. Each point
189 | represents a sample, though here it shows the total time for the sample rather than time per
190 | iteration. The line is the line of best fit for these measurements.</p>
191 | <p>See <a href="https://bheisler.github.io/criterion.rs/book/user_guide/command_line_output.html#additional-statistics">the
192 | documentation</a> for more details on the additional statistics.</p>
193 | </section>
194 | </div>
195 | <section class="plots">
196 | <h3>Change Since Previous Benchmark</h3>
197 | <div class="relative">
198 | <table width="100%">
199 | <tbody>
200 | <tr>
201 | <td>
202 | <a href="both/pdf.svg">
203 | <img src="relative_pdf_small.svg" alt="PDF Comparison" width="450"
204 | height="300" />
205 | </a>
206 | </td>
207 | <td>
208 | <a href="both/regression.svg">
209 | <img src="relative_regression_small.svg" alt="Regression Comparison" width="450"
210 | height="300" />
211 | </a>
212 | </td>
213 | </tr>
214 | </tbody>
215 | </table>
216 | </div>
217 | </section>
218 | <section class="stats">
219 | <div class="additional_stats">
220 | <h4>Additional Statistics:</h4>
221 | <table>
222 | <thead>
223 | <tr>
224 | <th></th>
225 | <th title="0.95 confidence level" class="ci-bound">Lower bound</th>
226 | <th>Estimate</th>
227 | <th title="0.95 confidence level" class="ci-bound">Upper bound</th>
228 | <th></th>
229 | </tr>
230 | </thead>
231 | <tbody>
232 | <tr>
233 | <td>Change in time</td>
234 | <td class="ci-bound">+22.313%</td>
235 | <td>+24.218%</td>
236 | <td class="ci-bound">+26.123%</td>
237 | <td>(p = 0.00 <
238 | 0.05)</td>
239 | </tr>
240 | </tbody>
241 | </table>
242 | Performance has regressed.
243 | </div>
244 | <div class="additional_plots">
245 | <h4>Additional Plots:</h4>
246 | <ul>
247 |
248 | <li>
249 | <a href="change/mean.svg">Change in mean</a>
250 | </li>
251 | <li>
252 | <a href="change/median.svg">Change in median</a>
253 | </li>
254 | <li>
255 | <a href="change/t-test.svg">T-Test</a>
256 | </li>
257 | </ul>
258 | </div>
259 | </section>
260 | <section class="explanation">
261 | <h4>Understanding this report:</h4>
262 | <p>The plot on the left shows the probability of the function taking a certain amount of time. The red
263 | curve represents the saved measurements from the last time this benchmark was run, while the blue curve
264 | shows the measurements from this run. The lines represent the mean time per iteration. Click on the
265 | plot for a larger view.</p>
266 | <p>The plot on the right shows the two regressions. Again, the red line represents the previous measurement
267 | while the blue line shows the current measurement.</p>
268 | <p>See <a href="https://bheisler.github.io/criterion.rs/book/user_guide/command_line_output.html#change">the
269 | documentation</a> for more details on the additional statistics.</p>
270 | </section>
271 | </div>
272 | <div id="footer">
273 | <p>This report was generated by
274 | <a href="https://github.com/bheisler/criterion.rs">Criterion.rs</a>, a statistics-driven benchmarking
275 | library in Rust.</p>
276 | </div>
277 | </body>
278 |
279 | </html>
```
--------------------------------------------------------------------------------
/benchmarks/zero-address-check/report/index.html:
--------------------------------------------------------------------------------
```html
1 | <!DOCTYPE html>
2 | <html>
3 |
4 | <head>
5 | <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
6 | <title>zero-address-check - Criterion.rs</title>
7 | <style type="text/css">
8 | body {
9 | font: 14px Helvetica Neue;
10 | text-rendering: optimizelegibility;
11 | }
12 |
13 | .body {
14 | width: 960px;
15 | margin: auto;
16 | }
17 |
18 | th {
19 | font-weight: 200
20 | }
21 |
22 | th,
23 | td {
24 | padding-right: 3px;
25 | padding-bottom: 3px;
26 | }
27 |
28 | a:link {
29 | color: #1F78B4;
30 | text-decoration: none;
31 | }
32 |
33 | th.ci-bound {
34 | opacity: 0.6
35 | }
36 |
37 | td.ci-bound {
38 | opacity: 0.5
39 | }
40 |
41 | .stats {
42 | width: 80%;
43 | margin: auto;
44 | display: flex;
45 | }
46 |
47 | .additional_stats {
48 | flex: 0 0 60%
49 | }
50 |
51 | .additional_plots {
52 | flex: 1
53 | }
54 |
55 | h2 {
56 | font-size: 36px;
57 | font-weight: 300;
58 | }
59 |
60 | h3 {
61 | font-size: 24px;
62 | font-weight: 300;
63 | }
64 |
65 | #footer {
66 | height: 40px;
67 | background: #888;
68 | color: white;
69 | font-size: larger;
70 | font-weight: 300;
71 | }
72 |
73 | #footer a {
74 | color: white;
75 | text-decoration: underline;
76 | }
77 |
78 | #footer p {
79 | text-align: center
80 | }
81 | </style>
82 | </head>
83 |
84 | <body>
85 | <div class="body">
86 | <h2>zero-address-check</h2>
87 | <div class="absolute">
88 | <section class="plots">
89 | <table width="100%">
90 | <tbody>
91 | <tr>
92 | <td>
93 | <a href="pdf.svg">
94 | <img src="pdf_small.svg" alt="PDF of Slope" width="450" height="300" />
95 | </a>
96 | </td>
97 | <td>
98 | <a href="regression.svg">
99 | <img src="regression_small.svg" alt="Regression" width="450" height="300" />
100 | </a>
101 | </td>
102 | </tr>
103 | </tbody>
104 | </table>
105 | </section>
106 | <section class="stats">
107 | <div class="additional_stats">
108 | <h4>Additional Statistics:</h4>
109 | <table>
110 | <thead>
111 | <tr>
112 | <th></th>
113 | <th title="0.95 confidence level" class="ci-bound">Lower bound</th>
114 | <th>Estimate</th>
115 | <th title="0.95 confidence level" class="ci-bound">Upper bound</th>
116 | </tr>
117 | </thead>
118 | <tbody>
119 | <tr>
120 | <td>Slope</td>
121 | <td class="ci-bound">441.77 µs</td>
122 | <td>445.69 µs</td>
123 | <td class="ci-bound">451.39 µs</td>
124 | </tr>
125 | <tr>
126 | <td>R²</td>
127 | <td class="ci-bound">0.7879760</td>
128 | <td>0.7952005</td>
129 | <td class="ci-bound">0.7801513</td>
130 | </tr>
131 | <tr>
132 | <td>Mean</td>
133 | <td class="ci-bound">452.00 µs</td>
134 | <td>456.44 µs</td>
135 | <td class="ci-bound">461.63 µs</td>
136 | </tr>
137 | <tr>
138 | <td title="Standard Deviation">Std. Dev.</td>
139 | <td class="ci-bound">15.213 µs</td>
140 | <td>24.846 µs</td>
141 | <td class="ci-bound">33.120 µs</td>
142 | </tr>
143 | <tr>
144 | <td>Median</td>
145 | <td class="ci-bound">449.30 µs</td>
146 | <td>455.35 µs</td>
147 | <td class="ci-bound">458.73 µs</td>
148 | </tr>
149 | <tr>
150 | <td title="Median Absolute Deviation">MAD</td>
151 | <td class="ci-bound">10.087 µs</td>
152 | <td>14.327 µs</td>
153 | <td class="ci-bound">18.492 µs</td>
154 | </tr>
155 | </tbody>
156 | </table>
157 | </div>
158 | <div class="additional_plots">
159 | <h4>Additional Plots:</h4>
160 | <ul>
161 |
162 | <li>
163 | <a href="typical.svg">Typical</a>
164 | </li>
165 | <li>
166 | <a href="mean.svg">Mean</a>
167 | </li>
168 | <li>
169 | <a href="SD.svg">Std. Dev.</a>
170 | </li>
171 | <li>
172 | <a href="median.svg">Median</a>
173 | </li>
174 | <li>
175 | <a href="MAD.svg">MAD</a>
176 | </li>
177 | <li>
178 | <a href="slope.svg">Slope</a>
179 | </li>
180 | </ul>
181 | </div>
182 | </section>
183 | <section class="explanation">
184 | <h4>Understanding this report:</h4>
185 | <p>The plot on the left displays the average time per iteration for this benchmark. The shaded region
186 | shows the estimated probability of an iteration taking a certain amount of time, while the line
187 | shows the mean. Click on the plot for a larger view showing the outliers.</p>
188 | <p>The plot on the right shows the linear regression calculated from the measurements. Each point
189 | represents a sample, though here it shows the total time for the sample rather than time per
190 | iteration. The line is the line of best fit for these measurements.</p>
191 | <p>See <a href="https://bheisler.github.io/criterion.rs/book/user_guide/command_line_output.html#additional-statistics">the
192 | documentation</a> for more details on the additional statistics.</p>
193 | </section>
194 | </div>
195 | <section class="plots">
196 | <h3>Change Since Previous Benchmark</h3>
197 | <div class="relative">
198 | <table width="100%">
199 | <tbody>
200 | <tr>
201 | <td>
202 | <a href="both/pdf.svg">
203 | <img src="relative_pdf_small.svg" alt="PDF Comparison" width="450"
204 | height="300" />
205 | </a>
206 | </td>
207 | <td>
208 | <a href="both/regression.svg">
209 | <img src="relative_regression_small.svg" alt="Regression Comparison" width="450"
210 | height="300" />
211 | </a>
212 | </td>
213 | </tr>
214 | </tbody>
215 | </table>
216 | </div>
217 | </section>
218 | <section class="stats">
219 | <div class="additional_stats">
220 | <h4>Additional Statistics:</h4>
221 | <table>
222 | <thead>
223 | <tr>
224 | <th></th>
225 | <th title="0.95 confidence level" class="ci-bound">Lower bound</th>
226 | <th>Estimate</th>
227 | <th title="0.95 confidence level" class="ci-bound">Upper bound</th>
228 | <th></th>
229 | </tr>
230 | </thead>
231 | <tbody>
232 | <tr>
233 | <td>Change in time</td>
234 | <td class="ci-bound">-11.666%</td>
235 | <td>-7.9593%</td>
236 | <td class="ci-bound">-4.5319%</td>
237 | <td>(p = 0.00 <
238 | 0.05)</td>
239 | </tr>
240 | </tbody>
241 | </table>
242 | Performance has improved.
243 | </div>
244 | <div class="additional_plots">
245 | <h4>Additional Plots:</h4>
246 | <ul>
247 |
248 | <li>
249 | <a href="change/mean.svg">Change in mean</a>
250 | </li>
251 | <li>
252 | <a href="change/median.svg">Change in median</a>
253 | </li>
254 | <li>
255 | <a href="change/t-test.svg">T-Test</a>
256 | </li>
257 | </ul>
258 | </div>
259 | </section>
260 | <section class="explanation">
261 | <h4>Understanding this report:</h4>
262 | <p>The plot on the left shows the probability of the function taking a certain amount of time. The red
263 | curve represents the saved measurements from the last time this benchmark was run, while the blue curve
264 | shows the measurements from this run. The lines represent the mean time per iteration. Click on the
265 | plot for a larger view.</p>
266 | <p>The plot on the right shows the two regressions. Again, the red line represents the previous measurement
267 | while the blue line shows the current measurement.</p>
268 | <p>See <a href="https://bheisler.github.io/criterion.rs/book/user_guide/command_line_output.html#change">the
269 | documentation</a> for more details on the additional statistics.</p>
270 | </section>
271 | </div>
272 | <div id="footer">
273 | <p>This report was generated by
274 | <a href="https://github.com/bheisler/criterion.rs">Criterion.rs</a>, a statistics-driven benchmarking
275 | library in Rust.</p>
276 | </div>
277 | </body>
278 |
279 | </html>
```
--------------------------------------------------------------------------------
/benchmarks/centralization-risk/report/index.html:
--------------------------------------------------------------------------------
```html
1 | <!DOCTYPE html>
2 | <html>
3 |
4 | <head>
5 | <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
6 | <title>centralization-risk - Criterion.rs</title>
7 | <style type="text/css">
8 | body {
9 | font: 14px Helvetica Neue;
10 | text-rendering: optimizelegibility;
11 | }
12 |
13 | .body {
14 | width: 960px;
15 | margin: auto;
16 | }
17 |
18 | th {
19 | font-weight: 200
20 | }
21 |
22 | th,
23 | td {
24 | padding-right: 3px;
25 | padding-bottom: 3px;
26 | }
27 |
28 | a:link {
29 | color: #1F78B4;
30 | text-decoration: none;
31 | }
32 |
33 | th.ci-bound {
34 | opacity: 0.6
35 | }
36 |
37 | td.ci-bound {
38 | opacity: 0.5
39 | }
40 |
41 | .stats {
42 | width: 80%;
43 | margin: auto;
44 | display: flex;
45 | }
46 |
47 | .additional_stats {
48 | flex: 0 0 60%
49 | }
50 |
51 | .additional_plots {
52 | flex: 1
53 | }
54 |
55 | h2 {
56 | font-size: 36px;
57 | font-weight: 300;
58 | }
59 |
60 | h3 {
61 | font-size: 24px;
62 | font-weight: 300;
63 | }
64 |
65 | #footer {
66 | height: 40px;
67 | background: #888;
68 | color: white;
69 | font-size: larger;
70 | font-weight: 300;
71 | }
72 |
73 | #footer a {
74 | color: white;
75 | text-decoration: underline;
76 | }
77 |
78 | #footer p {
79 | text-align: center
80 | }
81 | </style>
82 | </head>
83 |
84 | <body>
85 | <div class="body">
86 | <h2>centralization-risk</h2>
87 | <div class="absolute">
88 | <section class="plots">
89 | <table width="100%">
90 | <tbody>
91 | <tr>
92 | <td>
93 | <a href="pdf.svg">
94 | <img src="pdf_small.svg" alt="PDF of Slope" width="450" height="300" />
95 | </a>
96 | </td>
97 | <td>
98 | <a href="regression.svg">
99 | <img src="regression_small.svg" alt="Regression" width="450" height="300" />
100 | </a>
101 | </td>
102 | </tr>
103 | </tbody>
104 | </table>
105 | </section>
106 | <section class="stats">
107 | <div class="additional_stats">
108 | <h4>Additional Statistics:</h4>
109 | <table>
110 | <thead>
111 | <tr>
112 | <th></th>
113 | <th title="0.95 confidence level" class="ci-bound">Lower bound</th>
114 | <th>Estimate</th>
115 | <th title="0.95 confidence level" class="ci-bound">Upper bound</th>
116 | </tr>
117 | </thead>
118 | <tbody>
119 | <tr>
120 | <td>Slope</td>
121 | <td class="ci-bound">12.314 µs</td>
122 | <td>12.437 µs</td>
123 | <td class="ci-bound">12.575 µs</td>
124 | </tr>
125 | <tr>
126 | <td>R²</td>
127 | <td class="ci-bound">0.7595754</td>
128 | <td>0.7676509</td>
129 | <td class="ci-bound">0.7574769</td>
130 | </tr>
131 | <tr>
132 | <td>Mean</td>
133 | <td class="ci-bound">12.372 µs</td>
134 | <td>12.490 µs</td>
135 | <td class="ci-bound">12.619 µs</td>
136 | </tr>
137 | <tr>
138 | <td title="Standard Deviation">Std. Dev.</td>
139 | <td class="ci-bound">453.22 ns</td>
140 | <td>635.99 ns</td>
141 | <td class="ci-bound">793.93 ns</td>
142 | </tr>
143 | <tr>
144 | <td>Median</td>
145 | <td class="ci-bound">12.290 µs</td>
146 | <td>12.358 µs</td>
147 | <td class="ci-bound">12.394 µs</td>
148 | </tr>
149 | <tr>
150 | <td title="Median Absolute Deviation">MAD</td>
151 | <td class="ci-bound">300.96 ns</td>
152 | <td>426.53 ns</td>
153 | <td class="ci-bound">522.86 ns</td>
154 | </tr>
155 | </tbody>
156 | </table>
157 | </div>
158 | <div class="additional_plots">
159 | <h4>Additional Plots:</h4>
160 | <ul>
161 |
162 | <li>
163 | <a href="typical.svg">Typical</a>
164 | </li>
165 | <li>
166 | <a href="mean.svg">Mean</a>
167 | </li>
168 | <li>
169 | <a href="SD.svg">Std. Dev.</a>
170 | </li>
171 | <li>
172 | <a href="median.svg">Median</a>
173 | </li>
174 | <li>
175 | <a href="MAD.svg">MAD</a>
176 | </li>
177 | <li>
178 | <a href="slope.svg">Slope</a>
179 | </li>
180 | </ul>
181 | </div>
182 | </section>
183 | <section class="explanation">
184 | <h4>Understanding this report:</h4>
185 | <p>The plot on the left displays the average time per iteration for this benchmark. The shaded region
186 | shows the estimated probability of an iteration taking a certain amount of time, while the line
187 | shows the mean. Click on the plot for a larger view showing the outliers.</p>
188 | <p>The plot on the right shows the linear regression calculated from the measurements. Each point
189 | represents a sample, though here it shows the total time for the sample rather than time per
190 | iteration. The line is the line of best fit for these measurements.</p>
191 | <p>See <a href="https://bheisler.github.io/criterion.rs/book/user_guide/command_line_output.html#additional-statistics">the
192 | documentation</a> for more details on the additional statistics.</p>
193 | </section>
194 | </div>
195 | <section class="plots">
196 | <h3>Change Since Previous Benchmark</h3>
197 | <div class="relative">
198 | <table width="100%">
199 | <tbody>
200 | <tr>
201 | <td>
202 | <a href="both/pdf.svg">
203 | <img src="relative_pdf_small.svg" alt="PDF Comparison" width="450"
204 | height="300" />
205 | </a>
206 | </td>
207 | <td>
208 | <a href="both/regression.svg">
209 | <img src="relative_regression_small.svg" alt="Regression Comparison" width="450"
210 | height="300" />
211 | </a>
212 | </td>
213 | </tr>
214 | </tbody>
215 | </table>
216 | </div>
217 | </section>
218 | <section class="stats">
219 | <div class="additional_stats">
220 | <h4>Additional Statistics:</h4>
221 | <table>
222 | <thead>
223 | <tr>
224 | <th></th>
225 | <th title="0.95 confidence level" class="ci-bound">Lower bound</th>
226 | <th>Estimate</th>
227 | <th title="0.95 confidence level" class="ci-bound">Upper bound</th>
228 | <th></th>
229 | </tr>
230 | </thead>
231 | <tbody>
232 | <tr>
233 | <td>Change in time</td>
234 | <td class="ci-bound">+5.5580%</td>
235 | <td>+6.7652%</td>
236 | <td class="ci-bound">+8.1573%</td>
237 | <td>(p = 0.00 <
238 | 0.05)</td>
239 | </tr>
240 | </tbody>
241 | </table>
242 | Performance has regressed.
243 | </div>
244 | <div class="additional_plots">
245 | <h4>Additional Plots:</h4>
246 | <ul>
247 |
248 | <li>
249 | <a href="change/mean.svg">Change in mean</a>
250 | </li>
251 | <li>
252 | <a href="change/median.svg">Change in median</a>
253 | </li>
254 | <li>
255 | <a href="change/t-test.svg">T-Test</a>
256 | </li>
257 | </ul>
258 | </div>
259 | </section>
260 | <section class="explanation">
261 | <h4>Understanding this report:</h4>
262 | <p>The plot on the left shows the probability of the function taking a certain amount of time. The red
263 | curve represents the saved measurements from the last time this benchmark was run, while the blue curve
264 | shows the measurements from this run. The lines represent the mean time per iteration. Click on the
265 | plot for a larger view.</p>
266 | <p>The plot on the right shows the two regressions. Again, the red line represents the previous measurement
267 | while the blue line shows the current measurement.</p>
268 | <p>See <a href="https://bheisler.github.io/criterion.rs/book/user_guide/command_line_output.html#change">the
269 | documentation</a> for more details on the additional statistics.</p>
270 | </section>
271 | </div>
272 | <div id="footer">
273 | <p>This report was generated by
274 | <a href="https://github.com/bheisler/criterion.rs">Criterion.rs</a>, a statistics-driven benchmarking
275 | library in Rust.</p>
276 | </div>
277 | </body>
278 |
279 | </html>
```
--------------------------------------------------------------------------------
/benchmarks/require-with-string/report/index.html:
--------------------------------------------------------------------------------
```html
1 | <!DOCTYPE html>
2 | <html>
3 |
4 | <head>
5 | <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
6 | <title>require-with-string - Criterion.rs</title>
7 | <style type="text/css">
8 | body {
9 | font: 14px Helvetica Neue;
10 | text-rendering: optimizelegibility;
11 | }
12 |
13 | .body {
14 | width: 960px;
15 | margin: auto;
16 | }
17 |
18 | th {
19 | font-weight: 200
20 | }
21 |
22 | th,
23 | td {
24 | padding-right: 3px;
25 | padding-bottom: 3px;
26 | }
27 |
28 | a:link {
29 | color: #1F78B4;
30 | text-decoration: none;
31 | }
32 |
33 | th.ci-bound {
34 | opacity: 0.6
35 | }
36 |
37 | td.ci-bound {
38 | opacity: 0.5
39 | }
40 |
41 | .stats {
42 | width: 80%;
43 | margin: auto;
44 | display: flex;
45 | }
46 |
47 | .additional_stats {
48 | flex: 0 0 60%
49 | }
50 |
51 | .additional_plots {
52 | flex: 1
53 | }
54 |
55 | h2 {
56 | font-size: 36px;
57 | font-weight: 300;
58 | }
59 |
60 | h3 {
61 | font-size: 24px;
62 | font-weight: 300;
63 | }
64 |
65 | #footer {
66 | height: 40px;
67 | background: #888;
68 | color: white;
69 | font-size: larger;
70 | font-weight: 300;
71 | }
72 |
73 | #footer a {
74 | color: white;
75 | text-decoration: underline;
76 | }
77 |
78 | #footer p {
79 | text-align: center
80 | }
81 | </style>
82 | </head>
83 |
84 | <body>
85 | <div class="body">
86 | <h2>require-with-string</h2>
87 | <div class="absolute">
88 | <section class="plots">
89 | <table width="100%">
90 | <tbody>
91 | <tr>
92 | <td>
93 | <a href="pdf.svg">
94 | <img src="pdf_small.svg" alt="PDF of Slope" width="450" height="300" />
95 | </a>
96 | </td>
97 | <td>
98 | <a href="regression.svg">
99 | <img src="regression_small.svg" alt="Regression" width="450" height="300" />
100 | </a>
101 | </td>
102 | </tr>
103 | </tbody>
104 | </table>
105 | </section>
106 | <section class="stats">
107 | <div class="additional_stats">
108 | <h4>Additional Statistics:</h4>
109 | <table>
110 | <thead>
111 | <tr>
112 | <th></th>
113 | <th title="0.95 confidence level" class="ci-bound">Lower bound</th>
114 | <th>Estimate</th>
115 | <th title="0.95 confidence level" class="ci-bound">Upper bound</th>
116 | </tr>
117 | </thead>
118 | <tbody>
119 | <tr>
120 | <td>Slope</td>
121 | <td class="ci-bound">27.201 µs</td>
122 | <td>27.604 µs</td>
123 | <td class="ci-bound">28.159 µs</td>
124 | </tr>
125 | <tr>
126 | <td>R²</td>
127 | <td class="ci-bound">0.4305139</td>
128 | <td>0.4388669</td>
129 | <td class="ci-bound">0.4232610</td>
130 | </tr>
131 | <tr>
132 | <td>Mean</td>
133 | <td class="ci-bound">28.957 µs</td>
134 | <td>29.510 µs</td>
135 | <td class="ci-bound">30.117 µs</td>
136 | </tr>
137 | <tr>
138 | <td title="Standard Deviation">Std. Dev.</td>
139 | <td class="ci-bound">2.0476 µs</td>
140 | <td>2.9781 µs</td>
141 | <td class="ci-bound">3.8002 µs</td>
142 | </tr>
143 | <tr>
144 | <td>Median</td>
145 | <td class="ci-bound">28.434 µs</td>
146 | <td>29.595 µs</td>
147 | <td class="ci-bound">29.808 µs</td>
148 | </tr>
149 | <tr>
150 | <td title="Median Absolute Deviation">MAD</td>
151 | <td class="ci-bound">2.1358 µs</td>
152 | <td>2.4434 µs</td>
153 | <td class="ci-bound">3.2236 µs</td>
154 | </tr>
155 | </tbody>
156 | </table>
157 | </div>
158 | <div class="additional_plots">
159 | <h4>Additional Plots:</h4>
160 | <ul>
161 |
162 | <li>
163 | <a href="typical.svg">Typical</a>
164 | </li>
165 | <li>
166 | <a href="mean.svg">Mean</a>
167 | </li>
168 | <li>
169 | <a href="SD.svg">Std. Dev.</a>
170 | </li>
171 | <li>
172 | <a href="median.svg">Median</a>
173 | </li>
174 | <li>
175 | <a href="MAD.svg">MAD</a>
176 | </li>
177 | <li>
178 | <a href="slope.svg">Slope</a>
179 | </li>
180 | </ul>
181 | </div>
182 | </section>
183 | <section class="explanation">
184 | <h4>Understanding this report:</h4>
185 | <p>The plot on the left displays the average time per iteration for this benchmark. The shaded region
186 | shows the estimated probability of an iteration taking a certain amount of time, while the line
187 | shows the mean. Click on the plot for a larger view showing the outliers.</p>
188 | <p>The plot on the right shows the linear regression calculated from the measurements. Each point
189 | represents a sample, though here it shows the total time for the sample rather than time per
190 | iteration. The line is the line of best fit for these measurements.</p>
191 | <p>See <a href="https://bheisler.github.io/criterion.rs/book/user_guide/command_line_output.html#additional-statistics">the
192 | documentation</a> for more details on the additional statistics.</p>
193 | </section>
194 | </div>
195 | <section class="plots">
196 | <h3>Change Since Previous Benchmark</h3>
197 | <div class="relative">
198 | <table width="100%">
199 | <tbody>
200 | <tr>
201 | <td>
202 | <a href="both/pdf.svg">
203 | <img src="relative_pdf_small.svg" alt="PDF Comparison" width="450"
204 | height="300" />
205 | </a>
206 | </td>
207 | <td>
208 | <a href="both/regression.svg">
209 | <img src="relative_regression_small.svg" alt="Regression Comparison" width="450"
210 | height="300" />
211 | </a>
212 | </td>
213 | </tr>
214 | </tbody>
215 | </table>
216 | </div>
217 | </section>
218 | <section class="stats">
219 | <div class="additional_stats">
220 | <h4>Additional Statistics:</h4>
221 | <table>
222 | <thead>
223 | <tr>
224 | <th></th>
225 | <th title="0.95 confidence level" class="ci-bound">Lower bound</th>
226 | <th>Estimate</th>
227 | <th title="0.95 confidence level" class="ci-bound">Upper bound</th>
228 | <th></th>
229 | </tr>
230 | </thead>
231 | <tbody>
232 | <tr>
233 | <td>Change in time</td>
234 | <td class="ci-bound">+8.4705%</td>
235 | <td>+11.129%</td>
236 | <td class="ci-bound">+13.651%</td>
237 | <td>(p = 0.00 <
238 | 0.05)</td>
239 | </tr>
240 | </tbody>
241 | </table>
242 | Performance has regressed.
243 | </div>
244 | <div class="additional_plots">
245 | <h4>Additional Plots:</h4>
246 | <ul>
247 |
248 | <li>
249 | <a href="change/mean.svg">Change in mean</a>
250 | </li>
251 | <li>
252 | <a href="change/median.svg">Change in median</a>
253 | </li>
254 | <li>
255 | <a href="change/t-test.svg">T-Test</a>
256 | </li>
257 | </ul>
258 | </div>
259 | </section>
260 | <section class="explanation">
261 | <h4>Understanding this report:</h4>
262 | <p>The plot on the left shows the probability of the function taking a certain amount of time. The red
263 | curve represents the saved measurements from the last time this benchmark was run, while the blue curve
264 | shows the measurements from this run. The lines represent the mean time per iteration. Click on the
265 | plot for a larger view.</p>
266 | <p>The plot on the right shows the two regressions. Again, the red line represents the previous measurement
267 | while the blue line shows the current measurement.</p>
268 | <p>See <a href="https://bheisler.github.io/criterion.rs/book/user_guide/command_line_output.html#change">the
269 | documentation</a> for more details on the additional statistics.</p>
270 | </section>
271 | </div>
272 | <div id="footer">
273 | <p>This report was generated by
274 | <a href="https://github.com/bheisler/criterion.rs">Criterion.rs</a>, a statistics-driven benchmarking
275 | library in Rust.</p>
276 | </div>
277 | </body>
278 |
279 | </html>
```
--------------------------------------------------------------------------------
/benchmarks/delegate-call-in-loop/report/index.html:
--------------------------------------------------------------------------------
```html
1 | <!DOCTYPE html>
2 | <html>
3 |
4 | <head>
5 | <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
6 | <title>delegate-call-in-loop - Criterion.rs</title>
7 | <style type="text/css">
8 | body {
9 | font: 14px Helvetica Neue;
10 | text-rendering: optimizelegibility;
11 | }
12 |
13 | .body {
14 | width: 960px;
15 | margin: auto;
16 | }
17 |
18 | th {
19 | font-weight: 200
20 | }
21 |
22 | th,
23 | td {
24 | padding-right: 3px;
25 | padding-bottom: 3px;
26 | }
27 |
28 | a:link {
29 | color: #1F78B4;
30 | text-decoration: none;
31 | }
32 |
33 | th.ci-bound {
34 | opacity: 0.6
35 | }
36 |
37 | td.ci-bound {
38 | opacity: 0.5
39 | }
40 |
41 | .stats {
42 | width: 80%;
43 | margin: auto;
44 | display: flex;
45 | }
46 |
47 | .additional_stats {
48 | flex: 0 0 60%
49 | }
50 |
51 | .additional_plots {
52 | flex: 1
53 | }
54 |
55 | h2 {
56 | font-size: 36px;
57 | font-weight: 300;
58 | }
59 |
60 | h3 {
61 | font-size: 24px;
62 | font-weight: 300;
63 | }
64 |
65 | #footer {
66 | height: 40px;
67 | background: #888;
68 | color: white;
69 | font-size: larger;
70 | font-weight: 300;
71 | }
72 |
73 | #footer a {
74 | color: white;
75 | text-decoration: underline;
76 | }
77 |
78 | #footer p {
79 | text-align: center
80 | }
81 | </style>
82 | </head>
83 |
84 | <body>
85 | <div class="body">
86 | <h2>delegate-call-in-loop</h2>
87 | <div class="absolute">
88 | <section class="plots">
89 | <table width="100%">
90 | <tbody>
91 | <tr>
92 | <td>
93 | <a href="pdf.svg">
94 | <img src="pdf_small.svg" alt="PDF of Slope" width="450" height="300" />
95 | </a>
96 | </td>
97 | <td>
98 | <a href="regression.svg">
99 | <img src="regression_small.svg" alt="Regression" width="450" height="300" />
100 | </a>
101 | </td>
102 | </tr>
103 | </tbody>
104 | </table>
105 | </section>
106 | <section class="stats">
107 | <div class="additional_stats">
108 | <h4>Additional Statistics:</h4>
109 | <table>
110 | <thead>
111 | <tr>
112 | <th></th>
113 | <th title="0.95 confidence level" class="ci-bound">Lower bound</th>
114 | <th>Estimate</th>
115 | <th title="0.95 confidence level" class="ci-bound">Upper bound</th>
116 | </tr>
117 | </thead>
118 | <tbody>
119 | <tr>
120 | <td>Slope</td>
121 | <td class="ci-bound">11.251 µs</td>
122 | <td>11.303 µs</td>
123 | <td class="ci-bound">11.361 µs</td>
124 | </tr>
125 | <tr>
126 | <td>R²</td>
127 | <td class="ci-bound">0.9417500</td>
128 | <td>0.9443853</td>
129 | <td class="ci-bound">0.9411684</td>
130 | </tr>
131 | <tr>
132 | <td>Mean</td>
133 | <td class="ci-bound">11.318 µs</td>
134 | <td>11.421 µs</td>
135 | <td class="ci-bound">11.558 µs</td>
136 | </tr>
137 | <tr>
138 | <td title="Standard Deviation">Std. Dev.</td>
139 | <td class="ci-bound">283.90 ns</td>
140 | <td>619.71 ns</td>
141 | <td class="ci-bound">947.36 ns</td>
142 | </tr>
143 | <tr>
144 | <td>Median</td>
145 | <td class="ci-bound">11.272 µs</td>
146 | <td>11.320 µs</td>
147 | <td class="ci-bound">11.364 µs</td>
148 | </tr>
149 | <tr>
150 | <td title="Median Absolute Deviation">MAD</td>
151 | <td class="ci-bound">139.06 ns</td>
152 | <td>192.54 ns</td>
153 | <td class="ci-bound">280.28 ns</td>
154 | </tr>
155 | </tbody>
156 | </table>
157 | </div>
158 | <div class="additional_plots">
159 | <h4>Additional Plots:</h4>
160 | <ul>
161 |
162 | <li>
163 | <a href="typical.svg">Typical</a>
164 | </li>
165 | <li>
166 | <a href="mean.svg">Mean</a>
167 | </li>
168 | <li>
169 | <a href="SD.svg">Std. Dev.</a>
170 | </li>
171 | <li>
172 | <a href="median.svg">Median</a>
173 | </li>
174 | <li>
175 | <a href="MAD.svg">MAD</a>
176 | </li>
177 | <li>
178 | <a href="slope.svg">Slope</a>
179 | </li>
180 | </ul>
181 | </div>
182 | </section>
183 | <section class="explanation">
184 | <h4>Understanding this report:</h4>
185 | <p>The plot on the left displays the average time per iteration for this benchmark. The shaded region
186 | shows the estimated probability of an iteration taking a certain amount of time, while the line
187 | shows the mean. Click on the plot for a larger view showing the outliers.</p>
188 | <p>The plot on the right shows the linear regression calculated from the measurements. Each point
189 | represents a sample, though here it shows the total time for the sample rather than time per
190 | iteration. The line is the line of best fit for these measurements.</p>
191 | <p>See <a href="https://bheisler.github.io/criterion.rs/book/user_guide/command_line_output.html#additional-statistics">the
192 | documentation</a> for more details on the additional statistics.</p>
193 | </section>
194 | </div>
195 | <section class="plots">
196 | <h3>Change Since Previous Benchmark</h3>
197 | <div class="relative">
198 | <table width="100%">
199 | <tbody>
200 | <tr>
201 | <td>
202 | <a href="both/pdf.svg">
203 | <img src="relative_pdf_small.svg" alt="PDF Comparison" width="450"
204 | height="300" />
205 | </a>
206 | </td>
207 | <td>
208 | <a href="both/regression.svg">
209 | <img src="relative_regression_small.svg" alt="Regression Comparison" width="450"
210 | height="300" />
211 | </a>
212 | </td>
213 | </tr>
214 | </tbody>
215 | </table>
216 | </div>
217 | </section>
218 | <section class="stats">
219 | <div class="additional_stats">
220 | <h4>Additional Statistics:</h4>
221 | <table>
222 | <thead>
223 | <tr>
224 | <th></th>
225 | <th title="0.95 confidence level" class="ci-bound">Lower bound</th>
226 | <th>Estimate</th>
227 | <th title="0.95 confidence level" class="ci-bound">Upper bound</th>
228 | <th></th>
229 | </tr>
230 | </thead>
231 | <tbody>
232 | <tr>
233 | <td>Change in time</td>
234 | <td class="ci-bound">+1.9234%</td>
235 | <td>+3.1838%</td>
236 | <td class="ci-bound">+4.5795%</td>
237 | <td>(p = 0.00 <
238 | 0.05)</td>
239 | </tr>
240 | </tbody>
241 | </table>
242 | Performance has regressed.
243 | </div>
244 | <div class="additional_plots">
245 | <h4>Additional Plots:</h4>
246 | <ul>
247 |
248 | <li>
249 | <a href="change/mean.svg">Change in mean</a>
250 | </li>
251 | <li>
252 | <a href="change/median.svg">Change in median</a>
253 | </li>
254 | <li>
255 | <a href="change/t-test.svg">T-Test</a>
256 | </li>
257 | </ul>
258 | </div>
259 | </section>
260 | <section class="explanation">
261 | <h4>Understanding this report:</h4>
262 | <p>The plot on the left shows the probability of the function taking a certain amount of time. The red
263 | curve represents the saved measurements from the last time this benchmark was run, while the blue curve
264 | shows the measurements from this run. The lines represent the mean time per iteration. Click on the
265 | plot for a larger view.</p>
266 | <p>The plot on the right shows the two regressions. Again, the red line represents the previous measurement
267 | while the blue line shows the current measurement.</p>
268 | <p>See <a href="https://bheisler.github.io/criterion.rs/book/user_guide/command_line_output.html#change">the
269 | documentation</a> for more details on the additional statistics.</p>
270 | </section>
271 | </div>
272 | <div id="footer">
273 | <p>This report was generated by
274 | <a href="https://github.com/bheisler/criterion.rs">Criterion.rs</a>, a statistics-driven benchmarking
275 | library in Rust.</p>
276 | </div>
277 | </body>
278 |
279 | </html>
```
--------------------------------------------------------------------------------
/benchmarks/large-numeric-literal/report/index.html:
--------------------------------------------------------------------------------
```html
1 | <!DOCTYPE html>
2 | <html>
3 |
4 | <head>
5 | <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
6 | <title>large-numeric-literal - Criterion.rs</title>
7 | <style type="text/css">
8 | body {
9 | font: 14px Helvetica Neue;
10 | text-rendering: optimizelegibility;
11 | }
12 |
13 | .body {
14 | width: 960px;
15 | margin: auto;
16 | }
17 |
18 | th {
19 | font-weight: 200
20 | }
21 |
22 | th,
23 | td {
24 | padding-right: 3px;
25 | padding-bottom: 3px;
26 | }
27 |
28 | a:link {
29 | color: #1F78B4;
30 | text-decoration: none;
31 | }
32 |
33 | th.ci-bound {
34 | opacity: 0.6
35 | }
36 |
37 | td.ci-bound {
38 | opacity: 0.5
39 | }
40 |
41 | .stats {
42 | width: 80%;
43 | margin: auto;
44 | display: flex;
45 | }
46 |
47 | .additional_stats {
48 | flex: 0 0 60%
49 | }
50 |
51 | .additional_plots {
52 | flex: 1
53 | }
54 |
55 | h2 {
56 | font-size: 36px;
57 | font-weight: 300;
58 | }
59 |
60 | h3 {
61 | font-size: 24px;
62 | font-weight: 300;
63 | }
64 |
65 | #footer {
66 | height: 40px;
67 | background: #888;
68 | color: white;
69 | font-size: larger;
70 | font-weight: 300;
71 | }
72 |
73 | #footer a {
74 | color: white;
75 | text-decoration: underline;
76 | }
77 |
78 | #footer p {
79 | text-align: center
80 | }
81 | </style>
82 | </head>
83 |
84 | <body>
85 | <div class="body">
86 | <h2>large-numeric-literal</h2>
87 | <div class="absolute">
88 | <section class="plots">
89 | <table width="100%">
90 | <tbody>
91 | <tr>
92 | <td>
93 | <a href="pdf.svg">
94 | <img src="pdf_small.svg" alt="PDF of Slope" width="450" height="300" />
95 | </a>
96 | </td>
97 | <td>
98 | <a href="regression.svg">
99 | <img src="regression_small.svg" alt="Regression" width="450" height="300" />
100 | </a>
101 | </td>
102 | </tr>
103 | </tbody>
104 | </table>
105 | </section>
106 | <section class="stats">
107 | <div class="additional_stats">
108 | <h4>Additional Statistics:</h4>
109 | <table>
110 | <thead>
111 | <tr>
112 | <th></th>
113 | <th title="0.95 confidence level" class="ci-bound">Lower bound</th>
114 | <th>Estimate</th>
115 | <th title="0.95 confidence level" class="ci-bound">Upper bound</th>
116 | </tr>
117 | </thead>
118 | <tbody>
119 | <tr>
120 | <td>Slope</td>
121 | <td class="ci-bound">55.608 µs</td>
122 | <td>56.087 µs</td>
123 | <td class="ci-bound">56.669 µs</td>
124 | </tr>
125 | <tr>
126 | <td>R²</td>
127 | <td class="ci-bound">0.7510770</td>
128 | <td>0.7574338</td>
129 | <td class="ci-bound">0.7481087</td>
130 | </tr>
131 | <tr>
132 | <td>Mean</td>
133 | <td class="ci-bound">56.489 µs</td>
134 | <td>57.271 µs</td>
135 | <td class="ci-bound">58.171 µs</td>
136 | </tr>
137 | <tr>
138 | <td title="Standard Deviation">Std. Dev.</td>
139 | <td class="ci-bound">2.8429 µs</td>
140 | <td>4.3300 µs</td>
141 | <td class="ci-bound">5.6425 µs</td>
142 | </tr>
143 | <tr>
144 | <td>Median</td>
145 | <td class="ci-bound">55.303 µs</td>
146 | <td>55.558 µs</td>
147 | <td class="ci-bound">55.885 µs</td>
148 | </tr>
149 | <tr>
150 | <td title="Median Absolute Deviation">MAD</td>
151 | <td class="ci-bound">694.40 ns</td>
152 | <td>946.42 ns</td>
153 | <td class="ci-bound">1.4339 µs</td>
154 | </tr>
155 | </tbody>
156 | </table>
157 | </div>
158 | <div class="additional_plots">
159 | <h4>Additional Plots:</h4>
160 | <ul>
161 |
162 | <li>
163 | <a href="typical.svg">Typical</a>
164 | </li>
165 | <li>
166 | <a href="mean.svg">Mean</a>
167 | </li>
168 | <li>
169 | <a href="SD.svg">Std. Dev.</a>
170 | </li>
171 | <li>
172 | <a href="median.svg">Median</a>
173 | </li>
174 | <li>
175 | <a href="MAD.svg">MAD</a>
176 | </li>
177 | <li>
178 | <a href="slope.svg">Slope</a>
179 | </li>
180 | </ul>
181 | </div>
182 | </section>
183 | <section class="explanation">
184 | <h4>Understanding this report:</h4>
185 | <p>The plot on the left displays the average time per iteration for this benchmark. The shaded region
186 | shows the estimated probability of an iteration taking a certain amount of time, while the line
187 | shows the mean. Click on the plot for a larger view showing the outliers.</p>
188 | <p>The plot on the right shows the linear regression calculated from the measurements. Each point
189 | represents a sample, though here it shows the total time for the sample rather than time per
190 | iteration. The line is the line of best fit for these measurements.</p>
191 | <p>See <a href="https://bheisler.github.io/criterion.rs/book/user_guide/command_line_output.html#additional-statistics">the
192 | documentation</a> for more details on the additional statistics.</p>
193 | </section>
194 | </div>
195 | <section class="plots">
196 | <h3>Change Since Previous Benchmark</h3>
197 | <div class="relative">
198 | <table width="100%">
199 | <tbody>
200 | <tr>
201 | <td>
202 | <a href="both/pdf.svg">
203 | <img src="relative_pdf_small.svg" alt="PDF Comparison" width="450"
204 | height="300" />
205 | </a>
206 | </td>
207 | <td>
208 | <a href="both/regression.svg">
209 | <img src="relative_regression_small.svg" alt="Regression Comparison" width="450"
210 | height="300" />
211 | </a>
212 | </td>
213 | </tr>
214 | </tbody>
215 | </table>
216 | </div>
217 | </section>
218 | <section class="stats">
219 | <div class="additional_stats">
220 | <h4>Additional Statistics:</h4>
221 | <table>
222 | <thead>
223 | <tr>
224 | <th></th>
225 | <th title="0.95 confidence level" class="ci-bound">Lower bound</th>
226 | <th>Estimate</th>
227 | <th title="0.95 confidence level" class="ci-bound">Upper bound</th>
228 | <th></th>
229 | </tr>
230 | </thead>
231 | <tbody>
232 | <tr>
233 | <td>Change in time</td>
234 | <td class="ci-bound">+4.1642%</td>
235 | <td>+6.0234%</td>
236 | <td class="ci-bound">+8.1046%</td>
237 | <td>(p = 0.00 <
238 | 0.05)</td>
239 | </tr>
240 | </tbody>
241 | </table>
242 | Performance has regressed.
243 | </div>
244 | <div class="additional_plots">
245 | <h4>Additional Plots:</h4>
246 | <ul>
247 |
248 | <li>
249 | <a href="change/mean.svg">Change in mean</a>
250 | </li>
251 | <li>
252 | <a href="change/median.svg">Change in median</a>
253 | </li>
254 | <li>
255 | <a href="change/t-test.svg">T-Test</a>
256 | </li>
257 | </ul>
258 | </div>
259 | </section>
260 | <section class="explanation">
261 | <h4>Understanding this report:</h4>
262 | <p>The plot on the left shows the probability of the function taking a certain amount of time. The red
263 | curve represents the saved measurements from the last time this benchmark was run, while the blue curve
264 | shows the measurements from this run. The lines represent the mean time per iteration. Click on the
265 | plot for a larger view.</p>
266 | <p>The plot on the right shows the two regressions. Again, the red line represents the previous measurement
267 | while the blue line shows the current measurement.</p>
268 | <p>See <a href="https://bheisler.github.io/criterion.rs/book/user_guide/command_line_output.html#change">the
269 | documentation</a> for more details on the additional statistics.</p>
270 | </section>
271 | </div>
272 | <div id="footer">
273 | <p>This report was generated by
274 | <a href="https://github.com/bheisler/criterion.rs">Criterion.rs</a>, a statistics-driven benchmarking
275 | library in Rust.</p>
276 | </div>
277 | </body>
278 |
279 | </html>
```