Skip to content

Commit 3c3437b

Browse files
committed
test: add rust parse event output filtering test
1 parent bdb2a1a commit 3c3437b

File tree

1 file changed

+106
-1
lines changed

1 file changed

+106
-1
lines changed

src/parser/src/e2e_test.rs

+106-1
Original file line numberDiff line numberDiff line change
@@ -1189,7 +1189,7 @@ mod tests {
11891189
}
11901190

11911191
#[test]
1192-
fn test_prop_state_filter() {
1192+
fn test_parse_ticks_prop_state_filter() {
11931193
let huf = create_huffman_lookup_table();
11941194
let huf2 = create_huffman_lookup_table();
11951195

@@ -1293,6 +1293,111 @@ mod tests {
12931293
assert_eq!(manually_filtered_positions, automatically_filtered_positions);
12941294
}
12951295

1296+
#[test]
1297+
fn test_parse_event_prop_state_filter() {
1298+
let huf = create_huffman_lookup_table();
1299+
let huf2 = create_huffman_lookup_table();
1300+
1301+
let settings = ParserInputs {
1302+
wanted_players: vec![76561198244754626],
1303+
real_name_to_og_name: AHashMap::default(),
1304+
wanted_player_props: vec!["X".to_string(), "CCSGameRulesProxy.CCSGameRules.m_bBombPlanted".to_string()],
1305+
wanted_events: vec!["player_death".to_string()],
1306+
wanted_other_props: vec![],
1307+
parse_ents: true,
1308+
wanted_ticks: vec![],
1309+
wanted_player_prop_states: AHashMap::default(),
1310+
wanted_other_prop_states: AHashMap::default(),
1311+
parse_projectiles: true,
1312+
only_header: false,
1313+
count_props: false,
1314+
only_convars: false,
1315+
huffman_lookup_table: &huf,
1316+
order_by_steamid: false,
1317+
};
1318+
1319+
let mut wanted_player_prop_states: AHashMap<std::string::String, Variant> = AHashMap::default();
1320+
wanted_player_prop_states.insert(
1321+
"CCSGameRulesProxy.CCSGameRules.m_bBombPlanted".to_string(),
1322+
Variant::Bool(true),
1323+
);
1324+
let settings_with_filter = ParserInputs {
1325+
wanted_players: vec![76561198244754626],
1326+
real_name_to_og_name: AHashMap::default(),
1327+
wanted_player_props: vec!["X".to_string()],
1328+
wanted_events: vec!["player_death".to_string()],
1329+
wanted_other_props: vec![],
1330+
parse_ents: true,
1331+
wanted_ticks: vec![],
1332+
wanted_player_prop_states: AHashMap::default(),
1333+
wanted_other_prop_states: wanted_player_prop_states,
1334+
parse_projectiles: true,
1335+
only_header: false,
1336+
count_props: false,
1337+
only_convars: false,
1338+
huffman_lookup_table: &huf2,
1339+
order_by_steamid: false,
1340+
};
1341+
1342+
let mut ds = Parser::new(settings, crate::parse_demo::ParsingMode::ForceMultiThreaded);
1343+
let mut ds_with_filter = Parser::new(settings_with_filter, crate::parse_demo::ParsingMode::ForceMultiThreaded);
1344+
let file = File::open("test_demo.dem").unwrap();
1345+
let mmap = unsafe { MmapOptions::new().map(&file).unwrap() };
1346+
let output = ds.parse_demo(&mmap).unwrap();
1347+
let output_with_filter = ds_with_filter.parse_demo(&mmap).unwrap();
1348+
1349+
let positions = match output
1350+
.df
1351+
.get(&PLAYER_X_ID)
1352+
.unwrap()
1353+
.data
1354+
.clone()
1355+
.unwrap_or(VarVec::F32(vec![]))
1356+
{
1357+
VarVec::F32(positions_vec) => positions_vec,
1358+
_ => vec![],
1359+
};
1360+
let bomb_prop_id = output
1361+
.prop_controller
1362+
.prop_infos
1363+
.iter()
1364+
.find(|prop| prop.prop_name == "CCSGameRulesProxy.CCSGameRules.m_bBombPlanted")
1365+
.map(|prop| prop.id)
1366+
.unwrap();
1367+
let bomb = match output
1368+
.df
1369+
.get(&bomb_prop_id)
1370+
.unwrap()
1371+
.data
1372+
.clone()
1373+
.unwrap_or(VarVec::Bool(vec![]))
1374+
{
1375+
VarVec::Bool(bomb_vec) => bomb_vec,
1376+
_ => vec![],
1377+
};
1378+
let manually_filtered_positions: Vec<Option<f32>> = positions
1379+
.iter()
1380+
.zip(bomb.iter())
1381+
.filter_map(|(xPos, bombPlanted)| match bombPlanted {
1382+
Some(true) => Some(*xPos),
1383+
_ => None,
1384+
})
1385+
.collect();
1386+
let automatically_filtered_positions = match output_with_filter
1387+
.df
1388+
.get(&PLAYER_X_ID)
1389+
.unwrap()
1390+
.data
1391+
.clone()
1392+
.unwrap_or(VarVec::F32(vec![]))
1393+
{
1394+
VarVec::F32(positions_vec) => positions_vec,
1395+
_ => vec![],
1396+
};
1397+
1398+
assert_eq!(manually_filtered_positions, automatically_filtered_positions);
1399+
}
1400+
12961401
#[test]
12971402
fn test_player_filter() {
12981403
let huf = create_huffman_lookup_table();

0 commit comments

Comments
 (0)