use std::time::Duration;
use criterion::{criterion_group, criterion_main, Criterion};
use feature_flag::{FlagEvaluator, FlagSet, Subject};
const SET: &str = r#"{
"flags": [{
"id": "f",
"variants": ["control", "treatment"],
"default_variant": "control",
"rules": [{
"id": "rollout",
"when": {"kind": "compare", "attr": "country", "op": "in", "value": ["US", "CA"]},
"outcome": {
"kind": "rollout",
"variants": [
{"variant": "control", "weight": 70},
{"variant": "treatment", "weight": 30}
]
}
}]
}]
}"#;
fn bench_evaluate(c: &mut Criterion) {
let evaluator = FlagEvaluator::new(FlagSet::from_json(SET).unwrap());
let subject = Subject::new("user-1").with_attr("country", "US");
c.bench_function("evaluate_rule_match_rollout", |b| {
b.iter(|| {
let _ = evaluator.evaluate("f", &subject).unwrap();
});
});
}
criterion_group! {
name = benches;
config = Criterion::default().sample_size(50).measurement_time(Duration::from_secs(3));
targets = bench_evaluate
}
criterion_main!(benches);