{"id":16848804,"url":"https://github.com/yoav-lavi/benchmark-scratchpad","last_synced_at":"2025-03-18T07:43:26.022Z","repository":{"id":42681522,"uuid":"475130232","full_name":"yoav-lavi/benchmark-scratchpad","owner":"yoav-lavi","description":"A quick scratchpad for benchmarking Rust code","archived":false,"fork":false,"pushed_at":"2022-03-29T18:07:41.000Z","size":16,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-01-24T14:27:05.478Z","etag":null,"topics":["benchmark","rust","rust-lang","scratchpad"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/yoav-lavi.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2022-03-28T18:30:18.000Z","updated_at":"2022-03-28T18:31:52.000Z","dependencies_parsed_at":"2022-09-21T23:13:37.765Z","dependency_job_id":null,"html_url":"https://github.com/yoav-lavi/benchmark-scratchpad","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yoav-lavi%2Fbenchmark-scratchpad","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yoav-lavi%2Fbenchmark-scratchpad/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yoav-lavi%2Fbenchmark-scratchpad/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yoav-lavi%2Fbenchmark-scratchpad/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/yoav-lavi","download_url":"https://codeload.github.com/yoav-lavi/benchmark-scratchpad/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244181356,"owners_count":20411601,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["benchmark","rust","rust-lang","scratchpad"],"created_at":"2024-10-13T13:12:40.965Z","updated_at":"2025-03-18T07:43:25.987Z","avatar_url":"https://github.com/yoav-lavi.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Benchmark Scratchpad\n\nA quick scratchpad for benchmarking Rust code\n\n## Prerequisites\n\n- [cargo-make](https://github.com/sagiegurari/cargo-make) - `cargo install --force cargo-make`\n\n## Instructions\n\n1. Edit [benches/benchmark.rs](benches/benchmark.rs)\n2. Run `cargo make bench`\n\n## `benchmarks!`\n\nThe `benchmarks!` macro accepts input with the following structure:\n\n```rust\nbenchmarks! {\n  benchmark_name { /* benchmark impl */ }\n  other_benchmark_name { /* other benchmark impl */ }\n}\n```\n\nThe [criterion.rs](https://github.com/bheisler/criterion.rs) `black_box` function is included and usable within the macro.\n\n`criterion::black_box` stops the compiler from constant-folding away the whole function and replacing it with a constant.\n\nYou can you the keyword `@skip` before a benchmark for it not to be run:\n\n```rust\nbenchmarks! {\n  @skip benchmark_name { /* benchmark impl */ }\n}\n```\n\n## Tasks\n\n- `cargo make bench` - runs the benchmark via `cargo-criterion`\n- `cargo make bench-verbose` - runs the benchmark via `cargo-criterion` with verbose output\n- `cargo make reset` - resets the criterion data for earlier benchmarks\n- `cargo make new` - returns [benches/benchmark.rs](benches/benchmark.rs) to the initial state\n- `cargo make save [FILENAME]` - saves the contents of [benches/benchmark.rs](benches/benchmark.rs) to `saved/[FILENAME].rs`\n\n## Example\n\n```rust \nmod internals;\n\nbenchmarks! {\n    collect_vec_string {\n        let vector = black_box(vec![\"hello\", \"world\"]);\n        let _output = vector\n            .iter()\n            .map(|item| item.to_uppercase())\n            .collect::\u003cVec\u003cString\u003e\u003e()\n            .join(\"\");\n    }\n\n    collect_string {\n        let vector = black_box(vec![\"hello\", \"world\"]);\n        let _output = vector\n            .iter()\n            .map(|item| item.to_uppercase())\n            .collect::\u003cString\u003e();\n    }\n}\n```\n\n\n## Uses \n\n- [cargo-make](https://github.com/sagiegurari/cargo-make)\n- [cargo-criterion](https://github.com/bheisler/cargo-criterion)\n- [criterion.rs](https://github.com/bheisler/criterion.rs)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyoav-lavi%2Fbenchmark-scratchpad","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fyoav-lavi%2Fbenchmark-scratchpad","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyoav-lavi%2Fbenchmark-scratchpad/lists"}