summaryrefslogtreecommitdiffstats
path: root/third_party/rust/sfv/benches/bench.rs
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/rust/sfv/benches/bench.rs')
-rw-r--r--third_party/rust/sfv/benches/bench.rs171
1 files changed, 171 insertions, 0 deletions
diff --git a/third_party/rust/sfv/benches/bench.rs b/third_party/rust/sfv/benches/bench.rs
new file mode 100644
index 0000000000..3e924c1f32
--- /dev/null
+++ b/third_party/rust/sfv/benches/bench.rs
@@ -0,0 +1,171 @@
+#[macro_use]
+extern crate criterion;
+
+use criterion::{BenchmarkId, Criterion};
+use rust_decimal::prelude::FromPrimitive;
+use sfv::{BareItem, Decimal, Parser, SerializeValue};
+use sfv::{RefBareItem, RefDictSerializer, RefItemSerializer, RefListSerializer};
+
+criterion_main!(parsing, serializing, ref_serializing);
+
+criterion_group!(parsing, parsing_item, parsing_list, parsing_dict);
+
+fn parsing_item(c: &mut Criterion) {
+ let fixture =
+ "c29tZXZlcnlsb25nc3RyaW5ndmFsdWVyZXByZXNlbnRlZGFzYnl0ZXNhbnNvbWVvdGhlcmxvbmdsaW5l";
+ c.bench_with_input(
+ BenchmarkId::new("parsing_item", fixture),
+ &fixture,
+ move |bench, &input| {
+ bench.iter(|| Parser::parse_item(input.as_bytes()).unwrap());
+ },
+ );
+}
+
+fn parsing_list(c: &mut Criterion) {
+ let fixture = "a, abcdefghigklmnoprst, 123456785686457, 99999999999.999, (), (\"somelongstringvalue\" \"anotherlongstringvalue\";key=:c29tZXZlciBsb25nc3RyaW5ndmFsdWVyZXByZXNlbnRlZGFzYnl0ZXM: 145)";
+ c.bench_with_input(
+ BenchmarkId::new("parsing_list", fixture),
+ &fixture,
+ move |bench, &input| {
+ bench.iter(|| Parser::parse_list(input.as_bytes()).unwrap());
+ },
+ );
+}
+
+fn parsing_dict(c: &mut Criterion) {
+ let fixture = "a, dict_key2=abcdefghigklmnoprst, dict_key3=123456785686457, dict_key4=(\"inner-list-member\" :aW5uZXItbGlzdC1tZW1iZXI=:);key=aW5uZXItbGlzdC1wYXJhbWV0ZXJz";
+ c.bench_with_input(
+ BenchmarkId::new("parsing_dict", fixture),
+ &fixture,
+ move |bench, &input| {
+ bench.iter(|| Parser::parse_dictionary(input.as_bytes()).unwrap());
+ },
+ );
+}
+
+criterion_group!(
+ serializing,
+ serializing_item,
+ serializing_list,
+ serializing_dict
+);
+
+fn serializing_item(c: &mut Criterion) {
+ let fixture =
+ "c29tZXZlcnlsb25nc3RyaW5ndmFsdWVyZXByZXNlbnRlZGFzYnl0ZXNhbnNvbWVvdGhlcmxvbmdsaW5l";
+ c.bench_with_input(
+ BenchmarkId::new("serializing_item", fixture),
+ &fixture,
+ move |bench, &input| {
+ let parsed_item = Parser::parse_item(input.as_bytes()).unwrap();
+ bench.iter(|| parsed_item.serialize_value().unwrap());
+ },
+ );
+}
+
+fn serializing_list(c: &mut Criterion) {
+ let fixture = "a, abcdefghigklmnoprst, 123456785686457, 99999999999.999, (), (\"somelongstringvalue\" \"anotherlongstringvalue\";key=:c29tZXZlciBsb25nc3RyaW5ndmFsdWVyZXByZXNlbnRlZGFzYnl0ZXM: 145)";
+ c.bench_with_input(
+ BenchmarkId::new("serializing_list", fixture),
+ &fixture,
+ move |bench, &input| {
+ let parsed_list = Parser::parse_list(input.as_bytes()).unwrap();
+ bench.iter(|| parsed_list.serialize_value().unwrap());
+ },
+ );
+}
+
+fn serializing_dict(c: &mut Criterion) {
+ let fixture = "a, dict_key2=abcdefghigklmnoprst, dict_key3=123456785686457, dict_key4=(\"inner-list-member\" :aW5uZXItbGlzdC1tZW1iZXI=:);key=aW5uZXItbGlzdC1wYXJhbWV0ZXJz";
+ c.bench_with_input(
+ BenchmarkId::new("serializing_dict", fixture),
+ &fixture,
+ move |bench, &input| {
+ let parsed_dict = Parser::parse_dictionary(input.as_bytes()).unwrap();
+ bench.iter(|| parsed_dict.serialize_value().unwrap());
+ },
+ );
+}
+
+criterion_group!(
+ ref_serializing,
+ serializing_ref_item,
+ serializing_ref_list,
+ serializing_ref_dict
+);
+
+fn serializing_ref_item(c: &mut Criterion) {
+ let fixture =
+ "c29tZXZlcnlsb25nc3RyaW5ndmFsdWVyZXByZXNlbnRlZGFzYnl0ZXNhbnNvbWVvdGhlcmxvbmdsaW5l";
+ c.bench_with_input(
+ BenchmarkId::new("serializing_ref_item", fixture),
+ &fixture,
+ move |bench, &input| {
+ bench.iter(|| {
+ let mut output = String::new();
+ let ser = RefItemSerializer::new(&mut output);
+ ser.bare_item(&RefBareItem::ByteSeq(input.as_bytes()))
+ .unwrap();
+ });
+ },
+ );
+}
+
+fn serializing_ref_list(c: &mut Criterion) {
+ c.bench_function("serializing_ref_list", move |bench| {
+ bench.iter(|| {
+ let mut output = String::new();
+ let ser = RefListSerializer::new(&mut output);
+ ser.bare_item(&RefBareItem::Token("a"))
+ .unwrap()
+ .bare_item(&RefBareItem::Token("abcdefghigklmnoprst"))
+ .unwrap()
+ .bare_item(&RefBareItem::Integer(123456785686457))
+ .unwrap()
+ .bare_item(&RefBareItem::Decimal(
+ Decimal::from_f64(99999999999.999).unwrap(),
+ ))
+ .unwrap()
+ .open_inner_list()
+ .close_inner_list()
+ .open_inner_list()
+ .inner_list_bare_item(&RefBareItem::String("somelongstringvalue"))
+ .unwrap()
+ .inner_list_bare_item(&RefBareItem::String("anotherlongstringvalue"))
+ .unwrap()
+ .inner_list_parameter(
+ "key",
+ &RefBareItem::ByteSeq("somever longstringvaluerepresentedasbytes".as_bytes()),
+ )
+ .unwrap()
+ .inner_list_bare_item(&RefBareItem::Integer(145))
+ .unwrap()
+ .close_inner_list();
+ });
+ });
+}
+
+fn serializing_ref_dict(c: &mut Criterion) {
+ c.bench_function("serializing_ref_dict", move |bench| {
+ bench.iter(|| {
+ let mut output = String::new();
+ RefDictSerializer::new(&mut output)
+ .bare_item_member("a", &RefBareItem::Boolean(true))
+ .unwrap()
+ .bare_item_member("dict_key2", &RefBareItem::Token("abcdefghigklmnoprst"))
+ .unwrap()
+ .bare_item_member("dict_key3", &RefBareItem::Integer(123456785686457))
+ .unwrap()
+ .open_inner_list("dict_key4")
+ .unwrap()
+ .inner_list_bare_item(&RefBareItem::String("inner-list-member"))
+ .unwrap()
+ .inner_list_bare_item(&RefBareItem::ByteSeq("inner-list-member".as_bytes()))
+ .unwrap()
+ .close_inner_list()
+ .parameter("key", &RefBareItem::Token("aW5uZXItbGlzdC1wYXJhbWV0ZXJz"))
+ .unwrap();
+ });
+ });
+}