mirror of
https://github.com/PostHog/posthog.git
synced 2024-11-28 09:16:49 +01:00
50adf3b4ae
Co-authored-by: Dylan Martin <dylan@posthog.com> Co-authored-by: James Greenhill <fuziontech@gmail.com>
1214 lines
40 KiB
Rust
1214 lines
40 KiB
Rust
/// These tests are common between all libraries doing local evaluation of feature flags.
|
|
/// This ensures there are no mismatches between implementations.
|
|
use feature_flags::flag_matching::{FeatureFlagMatch, FeatureFlagMatcher};
|
|
|
|
use feature_flags::test_utils::create_flag_from_json;
|
|
use serde_json::json;
|
|
|
|
#[tokio::test]
|
|
async fn it_is_consistent_with_rollout_calculation_for_simple_flags() {
|
|
let flags = create_flag_from_json(Some(
|
|
json!([{
|
|
"id": 1,
|
|
"key": "simple-flag",
|
|
"name": "Simple flag",
|
|
"active": true,
|
|
"deleted": false,
|
|
"team_id": 1,
|
|
"filters": {
|
|
"groups": [
|
|
{
|
|
"properties": [],
|
|
"rollout_percentage": 45,
|
|
},
|
|
],
|
|
},
|
|
}])
|
|
.to_string(),
|
|
));
|
|
|
|
let results = vec![
|
|
false, true, true, false, true, false, false, true, false, true, false, true, true, false,
|
|
true, false, false, false, true, true, false, true, false, false, true, false, true, true,
|
|
false, false, false, true, true, true, true, false, false, false, false, false, false,
|
|
true, true, false, true, true, false, false, false, true, true, false, false, false, false,
|
|
true, false, true, false, true, false, true, true, false, true, false, true, false, true,
|
|
true, false, false, true, false, false, true, false, true, false, false, true, false,
|
|
false, false, true, true, false, true, true, false, true, true, true, true, true, false,
|
|
true, true, false, false, true, true, true, true, false, false, true, false, true, true,
|
|
true, false, false, false, false, false, true, false, false, true, true, true, false,
|
|
false, true, false, true, false, false, true, false, false, false, false, false, false,
|
|
false, false, true, true, false, false, true, false, false, true, true, false, false, true,
|
|
false, true, false, true, true, true, false, false, false, true, false, false, false,
|
|
false, true, true, false, true, true, false, true, false, true, true, false, true, false,
|
|
true, true, true, false, true, false, false, true, true, false, true, false, true, true,
|
|
false, false, true, true, true, true, false, true, true, false, false, true, false, true,
|
|
false, false, true, true, false, true, false, true, false, false, false, false, false,
|
|
false, false, true, false, true, true, false, false, true, false, true, false, false,
|
|
false, true, false, true, false, false, false, true, false, false, true, false, true, true,
|
|
false, false, false, false, true, false, false, false, false, false, false, false, false,
|
|
false, false, false, false, false, true, true, false, true, false, true, true, false, true,
|
|
false, true, false, false, false, true, true, true, true, false, false, false, false,
|
|
false, true, true, true, false, false, true, true, false, false, false, false, false, true,
|
|
false, true, true, true, true, false, true, true, true, false, false, true, false, true,
|
|
false, false, true, true, true, false, true, false, false, false, true, true, false, true,
|
|
false, true, false, true, true, true, true, true, false, false, true, false, true, false,
|
|
true, true, true, false, true, false, true, true, false, true, true, true, true, true,
|
|
false, false, false, false, false, true, false, true, false, false, true, true, false,
|
|
false, false, true, false, true, true, true, true, false, false, false, false, true, true,
|
|
false, false, true, true, false, true, true, true, true, false, true, true, true, false,
|
|
false, true, true, false, false, true, false, false, true, false, false, false, false,
|
|
false, false, false, false, false, false, true, true, false, false, true, false, false,
|
|
true, false, true, false, false, true, false, false, false, false, false, false, true,
|
|
false, false, false, false, false, false, false, false, false, true, true, true, false,
|
|
false, false, true, false, true, false, false, false, true, false, false, false, false,
|
|
false, false, false, true, false, false, false, false, false, false, false, false, true,
|
|
false, true, false, true, true, true, false, false, false, true, true, true, false, true,
|
|
false, true, true, false, false, false, true, false, false, false, false, true, false,
|
|
true, false, true, true, false, true, false, false, false, true, false, false, true, true,
|
|
false, true, false, false, false, false, false, false, true, true, false, false, true,
|
|
false, false, true, true, true, false, false, false, true, false, false, false, false,
|
|
true, false, true, false, false, false, true, false, true, true, false, true, false, true,
|
|
false, true, false, false, true, false, false, true, false, true, false, true, false, true,
|
|
false, false, true, true, true, true, false, true, false, false, false, false, false, true,
|
|
false, false, true, false, false, true, true, false, false, false, false, true, true, true,
|
|
false, false, true, false, false, true, true, true, true, false, false, false, true, false,
|
|
false, false, true, false, false, true, true, true, true, false, false, true, true, false,
|
|
true, false, true, false, false, true, true, false, true, true, true, true, false, false,
|
|
true, false, false, true, true, false, true, false, true, false, false, true, false, false,
|
|
false, false, true, true, true, false, true, false, false, true, false, false, true, false,
|
|
false, false, false, true, false, true, false, true, true, false, false, true, false, true,
|
|
true, true, false, false, false, false, true, true, false, true, false, false, false, true,
|
|
false, false, false, false, true, true, true, false, false, false, true, true, true, true,
|
|
false, true, true, false, true, true, true, false, true, false, false, true, false, true,
|
|
true, true, true, false, true, false, true, false, true, false, false, true, true, false,
|
|
false, true, false, true, false, false, false, false, true, false, true, false, false,
|
|
false, true, true, true, false, false, false, true, false, true, true, false, false, false,
|
|
false, false, true, false, true, false, false, true, true, false, true, true, true, true,
|
|
false, false, true, false, false, true, false, true, false, true, true, false, false,
|
|
false, true, false, true, true, false, false, false, true, false, true, false, true, true,
|
|
false, true, false, false, true, false, false, false, true, true, true, false, false,
|
|
false, false, false, true, false, false, true, true, true, true, true, false, false, false,
|
|
false, false, false, false, false, true, true, true, false, false, true, true, false, true,
|
|
true, false, true, false, true, false, false, false, true, false, false, true, false,
|
|
false, true, true, true, true, false, false, true, false, true, true, false, false, true,
|
|
false, false, true, true, false, true, false, false, true, true, true, false, false, false,
|
|
false, false, true, false, true, false, false, false, false, false, true, true, false,
|
|
true, true, true, false, false, false, false, true, true, true, true, false, true, true,
|
|
false, true, false, true, false, true, false, false, false, false, true, true, true, true,
|
|
false, false, true, false, true, true, false, false, false, false, false, false, true,
|
|
false, true, false, true, true, false, false, true, true, true, true, false, false, true,
|
|
false, true, true, false, false, true, true, true, false, true, false, false, true, true,
|
|
false, false, false, true, false, false, true, false, false, false, true, true, true, true,
|
|
false, true, false, true, false, true, false, true, false, false, true, false, false, true,
|
|
false, true, true,
|
|
];
|
|
|
|
for i in 0..1000 {
|
|
let distinct_id = format!("distinct_id_{}", i);
|
|
|
|
let feature_flag_match = FeatureFlagMatcher::new(distinct_id, None)
|
|
.get_match(&flags[0])
|
|
.await;
|
|
|
|
if results[i] {
|
|
assert_eq!(
|
|
feature_flag_match,
|
|
FeatureFlagMatch {
|
|
matches: true,
|
|
variant: None,
|
|
}
|
|
);
|
|
} else {
|
|
assert_eq!(
|
|
feature_flag_match,
|
|
FeatureFlagMatch {
|
|
matches: false,
|
|
variant: None,
|
|
}
|
|
);
|
|
}
|
|
}
|
|
}
|
|
|
|
#[tokio::test]
|
|
async fn it_is_consistent_with_rollout_calculation_for_multivariate_flags() {
|
|
let flags = create_flag_from_json(Some(
|
|
json!([{
|
|
"id": 1,
|
|
"key": "multivariate-flag",
|
|
"name": "Multivariate flag",
|
|
"active": true,
|
|
"deleted": false,
|
|
"team_id": 1,
|
|
"filters": {
|
|
"groups": [
|
|
{
|
|
"properties": [],
|
|
"rollout_percentage": 55,
|
|
},
|
|
],
|
|
"multivariate": {
|
|
"variants": [
|
|
{
|
|
"key": "first-variant",
|
|
"name": "First Variant",
|
|
"rollout_percentage": 50,
|
|
},
|
|
{
|
|
"key": "second-variant",
|
|
"name": "Second Variant",
|
|
"rollout_percentage": 20,
|
|
},
|
|
{
|
|
"key": "third-variant",
|
|
"name": "Third Variant",
|
|
"rollout_percentage": 20,
|
|
},
|
|
{
|
|
"key": "fourth-variant",
|
|
"name": "Fourth Variant",
|
|
"rollout_percentage": 5,
|
|
},
|
|
{
|
|
"key": "fifth-variant",
|
|
"name": "Fifth Variant",
|
|
"rollout_percentage": 5,
|
|
},
|
|
],
|
|
},
|
|
},
|
|
}])
|
|
.to_string(),
|
|
));
|
|
|
|
let results = vec![
|
|
Some("second-variant".to_string()),
|
|
Some("second-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
None,
|
|
Some("second-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
None,
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
Some("third-variant".to_string()),
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
Some("second-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
None,
|
|
Some("fourth-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
Some("third-variant".to_string()),
|
|
None,
|
|
None,
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
Some("third-variant".to_string()),
|
|
None,
|
|
Some("third-variant".to_string()),
|
|
Some("second-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
Some("third-variant".to_string()),
|
|
None,
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
Some("second-variant".to_string()),
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
Some("second-variant".to_string()),
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
Some("second-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
Some("second-variant".to_string()),
|
|
Some("second-variant".to_string()),
|
|
Some("third-variant".to_string()),
|
|
Some("second-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
Some("second-variant".to_string()),
|
|
Some("fourth-variant".to_string()),
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
Some("second-variant".to_string()),
|
|
None,
|
|
Some("third-variant".to_string()),
|
|
None,
|
|
None,
|
|
None,
|
|
None,
|
|
None,
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
Some("fifth-variant".to_string()),
|
|
None,
|
|
Some("second-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
Some("second-variant".to_string()),
|
|
None,
|
|
Some("third-variant".to_string()),
|
|
Some("third-variant".to_string()),
|
|
None,
|
|
None,
|
|
None,
|
|
None,
|
|
Some("third-variant".to_string()),
|
|
None,
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
Some("third-variant".to_string()),
|
|
Some("third-variant".to_string()),
|
|
None,
|
|
Some("third-variant".to_string()),
|
|
Some("second-variant".to_string()),
|
|
Some("third-variant".to_string()),
|
|
None,
|
|
None,
|
|
Some("second-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
None,
|
|
None,
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
None,
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
None,
|
|
None,
|
|
None,
|
|
None,
|
|
None,
|
|
None,
|
|
None,
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
Some("second-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
Some("second-variant".to_string()),
|
|
None,
|
|
Some("second-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
Some("second-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
Some("second-variant".to_string()),
|
|
Some("second-variant".to_string()),
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
None,
|
|
None,
|
|
Some("third-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
None,
|
|
None,
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
None,
|
|
None,
|
|
None,
|
|
None,
|
|
None,
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
Some("third-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
None,
|
|
Some("fifth-variant".to_string()),
|
|
Some("second-variant".to_string()),
|
|
None,
|
|
Some("second-variant".to_string()),
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
Some("third-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
Some("fifth-variant".to_string()),
|
|
Some("third-variant".to_string()),
|
|
None,
|
|
None,
|
|
Some("fourth-variant".to_string()),
|
|
None,
|
|
None,
|
|
None,
|
|
None,
|
|
Some("third-variant".to_string()),
|
|
None,
|
|
None,
|
|
Some("third-variant".to_string()),
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
Some("second-variant".to_string()),
|
|
Some("second-variant".to_string()),
|
|
Some("second-variant".to_string()),
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
Some("third-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
None,
|
|
None,
|
|
None,
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
Some("second-variant".to_string()),
|
|
None,
|
|
None,
|
|
None,
|
|
Some("second-variant".to_string()),
|
|
None,
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
Some("third-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
Some("third-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
Some("second-variant".to_string()),
|
|
Some("third-variant".to_string()),
|
|
Some("third-variant".to_string()),
|
|
None,
|
|
Some("second-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
Some("second-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
Some("fifth-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
None,
|
|
None,
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
Some("second-variant".to_string()),
|
|
None,
|
|
Some("second-variant".to_string()),
|
|
Some("third-variant".to_string()),
|
|
Some("third-variant".to_string()),
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
Some("third-variant".to_string()),
|
|
None,
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
Some("third-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
Some("third-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
Some("second-variant".to_string()),
|
|
Some("second-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
None,
|
|
None,
|
|
Some("second-variant".to_string()),
|
|
None,
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
Some("third-variant".to_string()),
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
Some("third-variant".to_string()),
|
|
None,
|
|
Some("third-variant".to_string()),
|
|
Some("second-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
Some("third-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
Some("second-variant".to_string()),
|
|
Some("fifth-variant".to_string()),
|
|
None,
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
None,
|
|
None,
|
|
Some("third-variant".to_string()),
|
|
None,
|
|
Some("second-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
None,
|
|
None,
|
|
None,
|
|
Some("third-variant".to_string()),
|
|
None,
|
|
None,
|
|
Some("third-variant".to_string()),
|
|
None,
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
Some("third-variant".to_string()),
|
|
None,
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
None,
|
|
Some("fourth-variant".to_string()),
|
|
Some("fourth-variant".to_string()),
|
|
Some("third-variant".to_string()),
|
|
Some("second-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
Some("third-variant".to_string()),
|
|
Some("fifth-variant".to_string()),
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
Some("fifth-variant".to_string()),
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
None,
|
|
None,
|
|
Some("second-variant".to_string()),
|
|
Some("fifth-variant".to_string()),
|
|
Some("second-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
Some("second-variant".to_string()),
|
|
None,
|
|
None,
|
|
Some("third-variant".to_string()),
|
|
None,
|
|
Some("second-variant".to_string()),
|
|
Some("fifth-variant".to_string()),
|
|
None,
|
|
Some("third-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
None,
|
|
Some("fourth-variant".to_string()),
|
|
None,
|
|
None,
|
|
Some("second-variant".to_string()),
|
|
None,
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
Some("fourth-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
Some("second-variant".to_string()),
|
|
None,
|
|
None,
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
Some("third-variant".to_string()),
|
|
Some("third-variant".to_string()),
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
Some("third-variant".to_string()),
|
|
Some("third-variant".to_string()),
|
|
None,
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
None,
|
|
Some("second-variant".to_string()),
|
|
Some("second-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
Some("fifth-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
None,
|
|
None,
|
|
Some("second-variant".to_string()),
|
|
Some("third-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
Some("fourth-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
Some("third-variant".to_string()),
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
Some("third-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
Some("third-variant".to_string()),
|
|
None,
|
|
Some("fourth-variant".to_string()),
|
|
Some("fifth-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
None,
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
Some("second-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
Some("second-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
Some("second-variant".to_string()),
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
None,
|
|
None,
|
|
Some("third-variant".to_string()),
|
|
Some("third-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
None,
|
|
Some("second-variant".to_string()),
|
|
Some("third-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
None,
|
|
None,
|
|
Some("second-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
Some("third-variant".to_string()),
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
None,
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
Some("third-variant".to_string()),
|
|
Some("third-variant".to_string()),
|
|
None,
|
|
None,
|
|
None,
|
|
None,
|
|
Some("third-variant".to_string()),
|
|
Some("fourth-variant".to_string()),
|
|
Some("fourth-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
Some("second-variant".to_string()),
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
Some("second-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
Some("third-variant".to_string()),
|
|
None,
|
|
Some("third-variant".to_string()),
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
Some("third-variant".to_string()),
|
|
None,
|
|
None,
|
|
None,
|
|
Some("fourth-variant".to_string()),
|
|
Some("second-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
Some("fourth-variant".to_string()),
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
Some("third-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
None,
|
|
Some("third-variant".to_string()),
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
Some("third-variant".to_string()),
|
|
Some("second-variant".to_string()),
|
|
Some("fourth-variant".to_string()),
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
None,
|
|
None,
|
|
None,
|
|
Some("second-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
Some("second-variant".to_string()),
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
Some("second-variant".to_string()),
|
|
Some("third-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
None,
|
|
None,
|
|
Some("third-variant".to_string()),
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
Some("third-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
Some("second-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
Some("fifth-variant".to_string()),
|
|
Some("fourth-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
Some("second-variant".to_string()),
|
|
None,
|
|
Some("fourth-variant".to_string()),
|
|
None,
|
|
None,
|
|
None,
|
|
Some("fourth-variant".to_string()),
|
|
None,
|
|
None,
|
|
Some("third-variant".to_string()),
|
|
None,
|
|
None,
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
Some("third-variant".to_string()),
|
|
Some("third-variant".to_string()),
|
|
Some("second-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
Some("second-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
None,
|
|
None,
|
|
None,
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
Some("second-variant".to_string()),
|
|
None,
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
Some("second-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
Some("third-variant".to_string()),
|
|
Some("second-variant".to_string()),
|
|
None,
|
|
None,
|
|
Some("fifth-variant".to_string()),
|
|
Some("third-variant".to_string()),
|
|
None,
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
None,
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
Some("second-variant".to_string()),
|
|
Some("third-variant".to_string()),
|
|
Some("third-variant".to_string()),
|
|
None,
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
Some("third-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
None,
|
|
None,
|
|
None,
|
|
Some("fourth-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
None,
|
|
None,
|
|
Some("third-variant".to_string()),
|
|
None,
|
|
None,
|
|
Some("second-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
None,
|
|
Some("second-variant".to_string()),
|
|
Some("third-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
None,
|
|
Some("second-variant".to_string()),
|
|
Some("third-variant".to_string()),
|
|
Some("second-variant".to_string()),
|
|
Some("third-variant".to_string()),
|
|
None,
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
Some("second-variant".to_string()),
|
|
None,
|
|
None,
|
|
None,
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
Some("third-variant".to_string()),
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
None,
|
|
Some("second-variant".to_string()),
|
|
Some("third-variant".to_string()),
|
|
Some("second-variant".to_string()),
|
|
Some("fourth-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
Some("second-variant".to_string()),
|
|
None,
|
|
None,
|
|
None,
|
|
None,
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
None,
|
|
None,
|
|
None,
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
Some("second-variant".to_string()),
|
|
None,
|
|
None,
|
|
None,
|
|
None,
|
|
Some("second-variant".to_string()),
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
Some("third-variant".to_string()),
|
|
None,
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
Some("third-variant".to_string()),
|
|
None,
|
|
Some("third-variant".to_string()),
|
|
None,
|
|
None,
|
|
Some("second-variant".to_string()),
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
Some("second-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
None,
|
|
None,
|
|
None,
|
|
None,
|
|
Some("second-variant".to_string()),
|
|
None,
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
Some("third-variant".to_string()),
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
None,
|
|
None,
|
|
None,
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
Some("second-variant".to_string()),
|
|
None,
|
|
None,
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
Some("fifth-variant".to_string()),
|
|
None,
|
|
None,
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
Some("third-variant".to_string()),
|
|
None,
|
|
None,
|
|
Some("second-variant".to_string()),
|
|
None,
|
|
None,
|
|
None,
|
|
None,
|
|
None,
|
|
Some("fourth-variant".to_string()),
|
|
Some("second-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
Some("second-variant".to_string()),
|
|
None,
|
|
Some("second-variant".to_string()),
|
|
None,
|
|
Some("second-variant".to_string()),
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
Some("second-variant".to_string()),
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
Some("fifth-variant".to_string()),
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
None,
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
Some("third-variant".to_string()),
|
|
None,
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
None,
|
|
Some("fifth-variant".to_string()),
|
|
None,
|
|
None,
|
|
Some("third-variant".to_string()),
|
|
None,
|
|
Some("third-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
Some("third-variant".to_string()),
|
|
Some("third-variant".to_string()),
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
None,
|
|
None,
|
|
None,
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
None,
|
|
None,
|
|
None,
|
|
Some("second-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
Some("second-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
Some("fifth-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
None,
|
|
Some("fourth-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
None,
|
|
Some("fourth-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
Some("second-variant".to_string()),
|
|
Some("third-variant".to_string()),
|
|
Some("third-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
None,
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
Some("third-variant".to_string()),
|
|
Some("third-variant".to_string()),
|
|
Some("third-variant".to_string()),
|
|
None,
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
Some("second-variant".to_string()),
|
|
None,
|
|
None,
|
|
Some("second-variant".to_string()),
|
|
None,
|
|
Some("third-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
Some("second-variant".to_string()),
|
|
Some("fifth-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
Some("fifth-variant".to_string()),
|
|
None,
|
|
None,
|
|
None,
|
|
Some("third-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
Some("second-variant".to_string()),
|
|
Some("fourth-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
Some("second-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
None,
|
|
None,
|
|
Some("second-variant".to_string()),
|
|
Some("third-variant".to_string()),
|
|
None,
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
None,
|
|
None,
|
|
None,
|
|
None,
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
Some("third-variant".to_string()),
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
Some("third-variant".to_string()),
|
|
Some("third-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
Some("second-variant".to_string()),
|
|
None,
|
|
Some("second-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
None,
|
|
None,
|
|
Some("second-variant".to_string()),
|
|
None,
|
|
Some("third-variant".to_string()),
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
Some("fifth-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
None,
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
Some("fourth-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
Some("fifth-variant".to_string()),
|
|
None,
|
|
None,
|
|
None,
|
|
Some("second-variant".to_string()),
|
|
None,
|
|
None,
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
Some("second-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
Some("third-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
Some("second-variant".to_string()),
|
|
None,
|
|
None,
|
|
Some("third-variant".to_string()),
|
|
Some("second-variant".to_string()),
|
|
Some("third-variant".to_string()),
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
Some("third-variant".to_string()),
|
|
Some("second-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
Some("third-variant".to_string()),
|
|
None,
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
None,
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
Some("third-variant".to_string()),
|
|
Some("second-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
Some("third-variant".to_string()),
|
|
Some("second-variant".to_string()),
|
|
Some("third-variant".to_string()),
|
|
None,
|
|
None,
|
|
Some("third-variant".to_string()),
|
|
Some("first-variant".to_string()),
|
|
None,
|
|
Some("first-variant".to_string()),
|
|
];
|
|
|
|
for i in 0..1000 {
|
|
let distinct_id = format!("distinct_id_{}", i);
|
|
|
|
let feature_flag_match = FeatureFlagMatcher::new(distinct_id, None)
|
|
.get_match(&flags[0])
|
|
.await;
|
|
|
|
if results[i].is_some() {
|
|
assert_eq!(
|
|
feature_flag_match,
|
|
FeatureFlagMatch {
|
|
matches: true,
|
|
variant: results[i].clone(),
|
|
}
|
|
);
|
|
} else {
|
|
assert_eq!(
|
|
feature_flag_match,
|
|
FeatureFlagMatch {
|
|
matches: false,
|
|
variant: None,
|
|
}
|
|
);
|
|
}
|
|
}
|
|
}
|