Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
7 changes: 7 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ grapheme = ["dep:unicode-segmentation"]
serde = { version = "1", default-features = false, optional = true }
zeroize = { version = "1", default-features = false, optional = true }
unicode-segmentation = { version = "1", optional = true }
arrayvec = { version = "0.7.8", default-features = false }

[dev-dependencies]
serde_json = "1"
Expand Down
9 changes: 6 additions & 3 deletions benches/bench.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ mod benches {
pub mod construction_bench;
pub mod mutation_bench;
pub mod query_bench;

pub mod uninit_bench;
}

fn criterion() -> Criterion {
Expand All @@ -16,9 +18,10 @@ criterion_group! {
config = criterion();
targets =
benches::noop_bench,
benches::construction_bench::bench_all,
benches::mutation_bench::bench_all,
benches::query_bench::bench_all,
// benches::construction_bench::bench_all,
// benches::mutation_bench::bench_all,
// benches::query_bench::bench_all,
benches::uninit_bench::bench_all,
}

criterion_main!(g_string,);
85 changes: 85 additions & 0 deletions benches/benches/uninit_bench.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
use criterion::{BenchmarkId, Criterion, black_box};
use g_string::{GStringNV, NoValidation, uninit::GStringUninit};

const S5: &str = "hello"; // 5
const S43: &str = "the quick brown fox jumps over the lazy dog"; // 43
const S64: &str = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQ789"; // 48 — fits S256, not S32
const UNI: &str = "héllo wörld 🌍"; // multi-byte UTF-8

type S50 = GStringNV<0, 50, false>;
type S100 = GStringNV<0, 100, false>;
type S255 = GStringNV<0, 255, false>;
type S500 = GStringNV<0, 500, false>;
type S1000 = GStringNV<0, 1000, false>;

type U50 = GStringUninit<NoValidation, 0, 50, false>;
type U100 = GStringUninit<NoValidation, 0, 100, false>;
type U255 = GStringUninit<NoValidation, 0, 255, false>;
type U500 = GStringUninit<NoValidation, 0, 500, false>;
type U1000 = GStringUninit<NoValidation, 0, 1000, false>;

pub fn bench_all(c: &mut Criterion) {
bench_try_new_vs_string(c);
}

pub fn bench_try_new_vs_string(c: &mut Criterion) {
let mut g = c.benchmark_group("uninit_bench");

for (label, input) in [("5b", S5), ("43b", S43), ("48b", S64), ("unicode", UNI)] {
g.bench_with_input(BenchmarkId::new("gstring_50", label), &input, |b, s| {
b.iter(|| black_box(S50::try_new(*s).unwrap()))
});

g.bench_with_input(
BenchmarkId::new("gstring_uninit_50", label),
&input,
|b, s| b.iter(|| black_box(U50::try_new(*s).unwrap())),
);

g.bench_with_input(BenchmarkId::new("gstring_100", label), &input, |b, s| {
b.iter(|| black_box(S100::try_new(*s).unwrap()))
});

g.bench_with_input(
BenchmarkId::new("gstring_uninit_100", label),
&input,
|b, s| b.iter(|| black_box(U100::try_new(*s).unwrap())),
);

g.bench_with_input(BenchmarkId::new("gstring_255", label), &input, |b, s| {
b.iter(|| black_box(S255::try_new(*s).unwrap()))
});

g.bench_with_input(
BenchmarkId::new("gstring_uninit_255", label),
&input,
|b, s| b.iter(|| black_box(U255::try_new(*s).unwrap())),
);

g.bench_with_input(BenchmarkId::new("gstring_500", label), &input, |b, s| {
b.iter(|| black_box(S500::try_new(*s).unwrap()))
});

g.bench_with_input(
BenchmarkId::new("gstring_uninit_500", label),
&input,
|b, s| b.iter(|| black_box(U500::try_new(*s).unwrap())),
);

g.bench_with_input(BenchmarkId::new("gstring_1000", label), &input, |b, s| {
b.iter(|| black_box(S1000::try_new(*s).unwrap()))
});

g.bench_with_input(
BenchmarkId::new("gstring_uninit_1000", label),
&input,
|b, s| b.iter(|| black_box(U1000::try_new(*s).unwrap())),
);

g.bench_with_input(BenchmarkId::new("string", label), &input, |b, s| {
b.iter(|| black_box(String::from(*s)))
});
}

g.finish();
}
153 changes: 153 additions & 0 deletions benchmarks/report/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,153 @@
<!DOCTYPE html>
<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Index - Criterion.rs</title>
<style type="text/css">
body {
font: 14px Helvetica Neue;
text-rendering: optimizelegibility;
}

.body {
width: 960px;
margin: auto;
}

a:link {
color: #1F78B4;
text-decoration: none;
}

h2 {
font-size: 36px;
font-weight: 300;
}

h3 {
font-size: 24px;
font-weight: 300;
}

#footer {
height: 40px;
background: #888;
color: white;
font-size: larger;
font-weight: 300;
}

#footer a {
color: white;
text-decoration: underline;
}

#footer p {
text-align: center
}

table {
border-collapse: collapse;
}

table,
th,
td {
border: 1px solid #888;
}
</style>
</head>

<body>
<div class="body">
<h2>Criterion.rs Benchmark Index</h2>
See individual benchmark pages below for more details.
<ul>
<li><a href="../uninit_bench/report/index.html">uninit_bench</a></li>

<ul>
<li>
<table>
<tr>
<th></th>
<th><a href="../uninit_bench/gstring_100/report/index.html">gstring_100</a></th>
<th><a href="../uninit_bench/gstring_1000/report/index.html">gstring_1000</a></th>
<th><a href="../uninit_bench/gstring_255/report/index.html">gstring_255</a></th>
<th><a href="../uninit_bench/gstring_50/report/index.html">gstring_50</a></th>
<th><a href="../uninit_bench/gstring_500/report/index.html">gstring_500</a></th>
<th><a href="../uninit_bench/gstring_uninit_100/report/index.html">gstring_uninit_100</a></th>
<th><a href="../uninit_bench/gstring_uninit_1000/report/index.html">gstring_uninit_1000</a></th>
<th><a href="../uninit_bench/gstring_uninit_255/report/index.html">gstring_uninit_255</a></th>
<th><a href="../uninit_bench/gstring_uninit_50/report/index.html">gstring_uninit_50</a></th>
<th><a href="../uninit_bench/gstring_uninit_500/report/index.html">gstring_uninit_500</a></th>
<th><a href="../uninit_bench/string/report/index.html">string</a></th>
</tr>
<tr>
<th><a href="../uninit_bench/43b/report/index.html">43b</a></th>
<td><a href="../uninit_bench/gstring_100/43b/report/index.html">uninit_bench/gstring_100/43b</a></td>
<td><a href="../uninit_bench/gstring_1000/43b/report/index.html">uninit_bench/gstring_1000/43b</a></td>
<td><a href="../uninit_bench/gstring_255/43b/report/index.html">uninit_bench/gstring_255/43b</a></td>
<td><a href="../uninit_bench/gstring_50/43b/report/index.html">uninit_bench/gstring_50/43b</a></td>
<td><a href="../uninit_bench/gstring_500/43b/report/index.html">uninit_bench/gstring_500/43b</a></td>
<td><a href="../uninit_bench/gstring_uninit_100/43b/report/index.html">uninit_bench/gstring_uninit_100/43b</a></td>
<td><a href="../uninit_bench/gstring_uninit_1000/43b/report/index.html">uninit_bench/gstring_uninit_1000/43b</a></td>
<td><a href="../uninit_bench/gstring_uninit_255/43b/report/index.html">uninit_bench/gstring_uninit_255/43b</a></td>
<td><a href="../uninit_bench/gstring_uninit_50/43b/report/index.html">uninit_bench/gstring_uninit_50/43b</a></td>
<td><a href="../uninit_bench/gstring_uninit_500/43b/report/index.html">uninit_bench/gstring_uninit_500/43b</a></td>
<td><a href="../uninit_bench/string/43b/report/index.html">uninit_bench/string/43b</a></td>
</tr>
<tr>
<th><a href="../uninit_bench/48b/report/index.html">48b</a></th>
<td><a href="../uninit_bench/gstring_100/48b/report/index.html">uninit_bench/gstring_100/48b</a></td>
<td><a href="../uninit_bench/gstring_1000/48b/report/index.html">uninit_bench/gstring_1000/48b</a></td>
<td><a href="../uninit_bench/gstring_255/48b/report/index.html">uninit_bench/gstring_255/48b</a></td>
<td><a href="../uninit_bench/gstring_50/48b/report/index.html">uninit_bench/gstring_50/48b</a></td>
<td><a href="../uninit_bench/gstring_500/48b/report/index.html">uninit_bench/gstring_500/48b</a></td>
<td><a href="../uninit_bench/gstring_uninit_100/48b/report/index.html">uninit_bench/gstring_uninit_100/48b</a></td>
<td><a href="../uninit_bench/gstring_uninit_1000/48b/report/index.html">uninit_bench/gstring_uninit_1000/48b</a></td>
<td><a href="../uninit_bench/gstring_uninit_255/48b/report/index.html">uninit_bench/gstring_uninit_255/48b</a></td>
<td><a href="../uninit_bench/gstring_uninit_50/48b/report/index.html">uninit_bench/gstring_uninit_50/48b</a></td>
<td><a href="../uninit_bench/gstring_uninit_500/48b/report/index.html">uninit_bench/gstring_uninit_500/48b</a></td>
<td><a href="../uninit_bench/string/48b/report/index.html">uninit_bench/string/48b</a></td>
</tr>
<tr>
<th><a href="../uninit_bench/5b/report/index.html">5b</a></th>
<td><a href="../uninit_bench/gstring_100/5b/report/index.html">uninit_bench/gstring_100/5b</a></td>
<td><a href="../uninit_bench/gstring_1000/5b/report/index.html">uninit_bench/gstring_1000/5b</a></td>
<td><a href="../uninit_bench/gstring_255/5b/report/index.html">uninit_bench/gstring_255/5b</a></td>
<td><a href="../uninit_bench/gstring_50/5b/report/index.html">uninit_bench/gstring_50/5b</a></td>
<td><a href="../uninit_bench/gstring_500/5b/report/index.html">uninit_bench/gstring_500/5b</a></td>
<td><a href="../uninit_bench/gstring_uninit_100/5b/report/index.html">uninit_bench/gstring_uninit_100/5b</a></td>
<td><a href="../uninit_bench/gstring_uninit_1000/5b/report/index.html">uninit_bench/gstring_uninit_1000/5b</a></td>
<td><a href="../uninit_bench/gstring_uninit_255/5b/report/index.html">uninit_bench/gstring_uninit_255/5b</a></td>
<td><a href="../uninit_bench/gstring_uninit_50/5b/report/index.html">uninit_bench/gstring_uninit_50/5b</a></td>
<td><a href="../uninit_bench/gstring_uninit_500/5b/report/index.html">uninit_bench/gstring_uninit_500/5b</a></td>
<td><a href="../uninit_bench/string/5b/report/index.html">uninit_bench/string/5b</a></td>
</tr>
<tr>
<th><a href="../uninit_bench/unicode/report/index.html">unicode</a></th>
<td><a href="../uninit_bench/gstring_100/unicode/report/index.html">uninit_bench/gstring_100/unicode</a></td>
<td><a href="../uninit_bench/gstring_1000/unicode/report/index.html">uninit_bench/gstring_1000/unicode</a></td>
<td><a href="../uninit_bench/gstring_255/unicode/report/index.html">uninit_bench/gstring_255/unicode</a></td>
<td><a href="../uninit_bench/gstring_50/unicode/report/index.html">uninit_bench/gstring_50/unicode</a></td>
<td><a href="../uninit_bench/gstring_500/unicode/report/index.html">uninit_bench/gstring_500/unicode</a></td>
<td><a href="../uninit_bench/gstring_uninit_100/unicode/report/index.html">uninit_bench/gstring_uninit_100/unicode</a></td>
<td><a href="../uninit_bench/gstring_uninit_1000/unicode/report/index.html">uninit_bench/gstring_uninit_1000/unicode</a></td>
<td><a href="../uninit_bench/gstring_uninit_255/unicode/report/index.html">uninit_bench/gstring_uninit_255/unicode</a></td>
<td><a href="../uninit_bench/gstring_uninit_50/unicode/report/index.html">uninit_bench/gstring_uninit_50/unicode</a></td>
<td><a href="../uninit_bench/gstring_uninit_500/unicode/report/index.html">uninit_bench/gstring_uninit_500/unicode</a></td>
<td><a href="../uninit_bench/string/unicode/report/index.html">uninit_bench/string/unicode</a></td>
</tr>
</table>
</li>
</ul>
</ul>
</div>
<div id="footer">
<p>This report was generated by
<a href="https://github.com/bheisler/criterion.rs">Criterion.rs</a>, a statistics-driven benchmarking
library in Rust.</p>
</div>
</body>
</html>
Loading