#[ 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();
});
});
}
Messung V0.5 in Prozent C=65 H=96 G=81
¤ Dauer der Verarbeitung: 0.9 Sekunden
(vorverarbeitet am 2026-06-18)
¤
*© Formatika GbR, Deutschland