-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpytest_results.json
More file actions
1 lines (1 loc) · 129 KB
/
pytest_results.json
File metadata and controls
1 lines (1 loc) · 129 KB
1
{"created": 1752370487.5427048, "duration": 7.225888252258301, "exitcode": 1, "root": "/home/justinchiu_cohere_com/librarybench/projects/terminal_game_engine/terminal_game_engine_multiplayer", "environment": {}, "summary": {"passed": 128, "failed": 27, "total": 155, "collected": 155}, "collectors": [{"nodeid": "", "outcome": "passed", "result": [{"nodeid": ".", "type": "Dir"}]}, {"nodeid": "pytermgame/chat", "outcome": "passed", "result": []}, {"nodeid": "pytermgame/lag_compensation", "outcome": "passed", "result": []}, {"nodeid": "pytermgame/lobby", "outcome": "passed", "result": []}, {"nodeid": "pytermgame/matchmaking", "outcome": "passed", "result": []}, {"nodeid": "pytermgame/network", "outcome": "passed", "result": []}, {"nodeid": "pytermgame/server", "outcome": "passed", "result": []}, {"nodeid": "pytermgame/spectator", "outcome": "passed", "result": []}, {"nodeid": "pytermgame", "outcome": "passed", "result": [{"nodeid": "pytermgame/chat", "type": "Package"}, {"nodeid": "pytermgame/lag_compensation", "type": "Package"}, {"nodeid": "pytermgame/lobby", "type": "Package"}, {"nodeid": "pytermgame/matchmaking", "type": "Package"}, {"nodeid": "pytermgame/network", "type": "Package"}, {"nodeid": "pytermgame/server", "type": "Package"}, {"nodeid": "pytermgame/spectator", "type": "Package"}]}, {"nodeid": "pytermgame.egg-info", "outcome": "passed", "result": []}, {"nodeid": "tests/test_chat.py::TestModerationFilter", "outcome": "passed", "result": [{"nodeid": "tests/test_chat.py::TestModerationFilter::test_filter_creation", "type": "Function", "lineno": 16}, {"nodeid": "tests/test_chat.py::TestModerationFilter::test_profanity_filtering", "type": "Function", "lineno": 25}, {"nodeid": "tests/test_chat.py::TestModerationFilter::test_rate_limiting", "type": "Function", "lineno": 42}, {"nodeid": "tests/test_chat.py::TestModerationFilter::test_player_banning", "type": "Function", "lineno": 59}, {"nodeid": "tests/test_chat.py::TestModerationFilter::test_player_muting", "type": "Function", "lineno": 79}, {"nodeid": "tests/test_chat.py::TestModerationFilter::test_url_filtering", "type": "Function", "lineno": 101}, {"nodeid": "tests/test_chat.py::TestModerationFilter::test_spam_detection", "type": "Function", "lineno": 123}, {"nodeid": "tests/test_chat.py::TestModerationFilter::test_warning_system", "type": "Function", "lineno": 139}, {"nodeid": "tests/test_chat.py::TestModerationFilter::test_player_status", "type": "Function", "lineno": 157}]}, {"nodeid": "tests/test_chat.py::TestCommandProcessor", "outcome": "passed", "result": [{"nodeid": "tests/test_chat.py::TestCommandProcessor::test_processor_creation", "type": "Function", "lineno": 182}, {"nodeid": "tests/test_chat.py::TestCommandProcessor::test_command_registration", "type": "Function", "lineno": 191}, {"nodeid": "tests/test_chat.py::TestCommandProcessor::test_command_aliases", "type": "Function", "lineno": 218}, {"nodeid": "tests/test_chat.py::TestCommandProcessor::test_command_permissions", "type": "Function", "lineno": 230}, {"nodeid": "tests/test_chat.py::TestCommandProcessor::test_help_command", "type": "Function", "lineno": 258}, {"nodeid": "tests/test_chat.py::TestCommandProcessor::test_whisper_command", "type": "Function", "lineno": 274}, {"nodeid": "tests/test_chat.py::TestCommandProcessor::test_moderation_commands", "type": "Function", "lineno": 289}]}, {"nodeid": "tests/test_chat.py::TestChatManager", "outcome": "passed", "result": [{"nodeid": "tests/test_chat.py::TestChatManager::test_manager_creation", "type": "Function", "lineno": 321}, {"nodeid": "tests/test_chat.py::TestChatManager::test_process_message", "type": "Function", "lineno": 330}, {"nodeid": "tests/test_chat.py::TestChatManager::test_command_processing", "type": "Function", "lineno": 341}, {"nodeid": "tests/test_chat.py::TestChatManager::test_moderation_integration", "type": "Function", "lineno": 349}, {"nodeid": "tests/test_chat.py::TestChatManager::test_team_chat", "type": "Function", "lineno": 366}, {"nodeid": "tests/test_chat.py::TestChatManager::test_message_history", "type": "Function", "lineno": 385}, {"nodeid": "tests/test_chat.py::TestChatManager::test_callbacks", "type": "Function", "lineno": 402}, {"nodeid": "tests/test_chat.py::TestChatManager::test_system_messages", "type": "Function", "lineno": 419}, {"nodeid": "tests/test_chat.py::TestChatManager::test_command_callbacks", "type": "Function", "lineno": 435}, {"nodeid": "tests/test_chat.py::TestChatManager::test_private_messages", "type": "Function", "lineno": 453}]}, {"nodeid": "tests/test_chat.py", "outcome": "passed", "result": [{"nodeid": "tests/test_chat.py::TestModerationFilter", "type": "Class"}, {"nodeid": "tests/test_chat.py::TestCommandProcessor", "type": "Class"}, {"nodeid": "tests/test_chat.py::TestChatManager", "type": "Class"}, {"nodeid": "tests/test_chat.py::test_chat_integration", "type": "Coroutine", "lineno": 473}]}, {"nodeid": "tests/test_game_server.py::TestGameState", "outcome": "passed", "result": [{"nodeid": "tests/test_game_server.py::TestGameState::test_game_state_creation", "type": "Function", "lineno": 15}, {"nodeid": "tests/test_game_server.py::TestGameState::test_add_remove_player", "type": "Function", "lineno": 25}, {"nodeid": "tests/test_game_server.py::TestGameState::test_update_player_position", "type": "Function", "lineno": 44}, {"nodeid": "tests/test_game_server.py::TestGameState::test_game_objects", "type": "Function", "lineno": 57}, {"nodeid": "tests/test_game_server.py::TestGameState::test_validate_player_input", "type": "Function", "lineno": 80}, {"nodeid": "tests/test_game_server.py::TestGameState::test_apply_physics", "type": "Function", "lineno": 101}, {"nodeid": "tests/test_game_server.py::TestGameState::test_serialize_for_client", "type": "Function", "lineno": 116}]}, {"nodeid": "tests/test_game_server.py::TestTickManager", "outcome": "passed", "result": [{"nodeid": "tests/test_game_server.py::TestTickManager::test_tick_manager_creation", "type": "Function", "lineno": 137}, {"nodeid": "tests/test_game_server.py::TestTickManager::test_tick_callbacks", "type": "Coroutine", "lineno": 146}, {"nodeid": "tests/test_game_server.py::TestTickManager::test_tick_stats", "type": "Function", "lineno": 165}]}, {"nodeid": "tests/test_game_server.py::TestGameServer", "outcome": "passed", "result": [{"nodeid": "tests/test_game_server.py::TestGameServer::test_server_initialization", "type": "Coroutine", "lineno": 178}, {"nodeid": "tests/test_game_server.py::TestGameServer::test_player_management", "type": "Coroutine", "lineno": 188}, {"nodeid": "tests/test_game_server.py::TestGameServer::test_input_handling", "type": "Coroutine", "lineno": 210}, {"nodeid": "tests/test_game_server.py::TestGameServer::test_chat_handling", "type": "Coroutine", "lineno": 239}, {"nodeid": "tests/test_game_server.py::TestGameServer::test_game_tick_processing", "type": "Coroutine", "lineno": 262}, {"nodeid": "tests/test_game_server.py::TestGameServer::test_server_stats", "type": "Function", "lineno": 282}]}, {"nodeid": "tests/test_game_server.py", "outcome": "passed", "result": [{"nodeid": "tests/test_game_server.py::TestGameState", "type": "Class"}, {"nodeid": "tests/test_game_server.py::TestTickManager", "type": "Class"}, {"nodeid": "tests/test_game_server.py::TestGameServer", "type": "Class"}, {"nodeid": "tests/test_game_server.py::test_game_server_integration", "type": "Coroutine", "lineno": 294}]}, {"nodeid": "tests/test_integration.py", "outcome": "passed", "result": [{"nodeid": "tests/test_integration.py::test_full_game_flow", "type": "Coroutine", "lineno": 17}, {"nodeid": "tests/test_integration.py::test_spectator_and_chat_integration", "type": "Coroutine", "lineno": 86}, {"nodeid": "tests/test_integration.py::test_lag_compensation_gameplay", "type": "Coroutine", "lineno": 154}, {"nodeid": "tests/test_integration.py::test_network_resilience", "type": "Coroutine", "lineno": 235}, {"nodeid": "tests/test_integration.py::test_performance_under_load", "type": "Coroutine", "lineno": 279}, {"nodeid": "tests/test_integration.py::test_error_recovery", "type": "Coroutine", "lineno": 338}, {"nodeid": "tests/test_integration.py::test_data_consistency", "type": "Function", "lineno": 383}]}, {"nodeid": "tests/test_lag_compensation.py::TestClientPrediction", "outcome": "passed", "result": [{"nodeid": "tests/test_lag_compensation.py::TestClientPrediction::test_prediction_creation", "type": "Function", "lineno": 17}, {"nodeid": "tests/test_lag_compensation.py::TestClientPrediction::test_predict_movement", "type": "Function", "lineno": 26}, {"nodeid": "tests/test_lag_compensation.py::TestClientPrediction::test_confirm_state", "type": "Function", "lineno": 49}, {"nodeid": "tests/test_lag_compensation.py::TestClientPrediction::test_corrected_position", "type": "Function", "lineno": 75}, {"nodeid": "tests/test_lag_compensation.py::TestClientPrediction::test_prediction_error", "type": "Function", "lineno": 104}, {"nodeid": "tests/test_lag_compensation.py::TestClientPrediction::test_disable_prediction", "type": "Function", "lineno": 136}]}, {"nodeid": "tests/test_lag_compensation.py::TestServerReconciliation", "outcome": "passed", "result": [{"nodeid": "tests/test_lag_compensation.py::TestServerReconciliation::test_reconciliation_creation", "type": "Function", "lineno": 154}, {"nodeid": "tests/test_lag_compensation.py::TestServerReconciliation::test_record_player_state", "type": "Function", "lineno": 162}, {"nodeid": "tests/test_lag_compensation.py::TestServerReconciliation::test_get_player_at_time", "type": "Function", "lineno": 183}, {"nodeid": "tests/test_lag_compensation.py::TestServerReconciliation::test_verify_hit", "type": "Function", "lineno": 209}, {"nodeid": "tests/test_lag_compensation.py::TestServerReconciliation::test_rewind_limit", "type": "Function", "lineno": 243}, {"nodeid": "tests/test_lag_compensation.py::TestServerReconciliation::test_validate_player_input", "type": "Function", "lineno": 261}, {"nodeid": "tests/test_lag_compensation.py::TestServerReconciliation::test_world_state_at_time", "type": "Function", "lineno": 291}]}, {"nodeid": "tests/test_lag_compensation.py::TestInterpolator", "outcome": "passed", "result": [{"nodeid": "tests/test_lag_compensation.py::TestInterpolator::test_interpolator_creation", "type": "Function", "lineno": 312}, {"nodeid": "tests/test_lag_compensation.py::TestInterpolator::test_update_entity", "type": "Function", "lineno": 320}, {"nodeid": "tests/test_lag_compensation.py::TestInterpolator::test_interpolated_position", "type": "Function", "lineno": 339}, {"nodeid": "tests/test_lag_compensation.py::TestInterpolator::test_smoothing_disabled", "type": "Function", "lineno": 366}, {"nodeid": "tests/test_lag_compensation.py::TestInterpolator::test_custom_delay", "type": "Function", "lineno": 378}, {"nodeid": "tests/test_lag_compensation.py::TestInterpolator::test_remove_entity", "type": "Function", "lineno": 389}]}, {"nodeid": "tests/test_lag_compensation.py::TestLagCompensator", "outcome": "passed", "result": [{"nodeid": "tests/test_lag_compensation.py::TestLagCompensator::test_compensator_creation", "type": "Function", "lineno": 403}, {"nodeid": "tests/test_lag_compensation.py::TestLagCompensator::test_client_prediction_integration", "type": "Function", "lineno": 412}, {"nodeid": "tests/test_lag_compensation.py::TestLagCompensator::test_server_reconciliation_integration", "type": "Function", "lineno": 435}, {"nodeid": "tests/test_lag_compensation.py::TestLagCompensator::test_interpolation_integration", "type": "Function", "lineno": 468}, {"nodeid": "tests/test_lag_compensation.py::TestLagCompensator::test_extrapolation", "type": "Function", "lineno": 490}, {"nodeid": "tests/test_lag_compensation.py::TestLagCompensator::test_metrics", "type": "Function", "lineno": 507}, {"nodeid": "tests/test_lag_compensation.py::TestLagCompensator::test_reset_player", "type": "Function", "lineno": 527}, {"nodeid": "tests/test_lag_compensation.py::TestLagCompensator::test_disable_features", "type": "Function", "lineno": 543}]}, {"nodeid": "tests/test_lag_compensation.py", "outcome": "passed", "result": [{"nodeid": "tests/test_lag_compensation.py::TestClientPrediction", "type": "Class"}, {"nodeid": "tests/test_lag_compensation.py::TestServerReconciliation", "type": "Class"}, {"nodeid": "tests/test_lag_compensation.py::TestInterpolator", "type": "Class"}, {"nodeid": "tests/test_lag_compensation.py::TestLagCompensator", "type": "Class"}, {"nodeid": "tests/test_lag_compensation.py::test_lag_compensation_integration", "type": "Coroutine", "lineno": 564}]}, {"nodeid": "tests/test_lobby.py::TestGameRoom", "outcome": "passed", "result": [{"nodeid": "tests/test_lobby.py::TestGameRoom::test_room_creation", "type": "Function", "lineno": 16}, {"nodeid": "tests/test_lobby.py::TestGameRoom::test_add_remove_players", "type": "Function", "lineno": 31}, {"nodeid": "tests/test_lobby.py::TestGameRoom::test_ready_status", "type": "Function", "lineno": 54}, {"nodeid": "tests/test_lobby.py::TestGameRoom::test_host_migration", "type": "Function", "lineno": 75}, {"nodeid": "tests/test_lobby.py::TestGameRoom::test_room_privacy", "type": "Function", "lineno": 89}, {"nodeid": "tests/test_lobby.py::TestGameRoom::test_start_end_game", "type": "Function", "lineno": 106}]}, {"nodeid": "tests/test_lobby.py::TestQueueManager", "outcome": "passed", "result": [{"nodeid": "tests/test_lobby.py::TestQueueManager::test_add_remove_players", "type": "Function", "lineno": 129}, {"nodeid": "tests/test_lobby.py::TestQueueManager::test_matchmaking_basic", "type": "Function", "lineno": 147}, {"nodeid": "tests/test_lobby.py::TestQueueManager::test_matchmaking_skill_tolerance", "type": "Function", "lineno": 166}, {"nodeid": "tests/test_lobby.py::TestQueueManager::test_balanced_teams", "type": "Function", "lineno": 181}, {"nodeid": "tests/test_lobby.py::TestQueueManager::test_queue_statistics", "type": "Function", "lineno": 208}, {"nodeid": "tests/test_lobby.py::TestQueueManager::test_player_position", "type": "Function", "lineno": 225}]}, {"nodeid": "tests/test_lobby.py::TestLobbySystem", "outcome": "passed", "result": [{"nodeid": "tests/test_lobby.py::TestLobbySystem::test_lobby_initialization", "type": "Coroutine", "lineno": 240}, {"nodeid": "tests/test_lobby.py::TestLobbySystem::test_create_room", "type": "Function", "lineno": 249}, {"nodeid": "tests/test_lobby.py::TestLobbySystem::test_join_leave_room", "type": "Function", "lineno": 265}, {"nodeid": "tests/test_lobby.py::TestLobbySystem::test_ready_status_management", "type": "Function", "lineno": 289}, {"nodeid": "tests/test_lobby.py::TestLobbySystem::test_matchmaking_integration", "type": "Function", "lineno": 305}, {"nodeid": "tests/test_lobby.py::TestLobbySystem::test_room_list", "type": "Function", "lineno": 326}, {"nodeid": "tests/test_lobby.py::TestLobbySystem::test_start_stop", "type": "Coroutine", "lineno": 352}, {"nodeid": "tests/test_lobby.py::TestLobbySystem::test_callbacks", "type": "Function", "lineno": 363}]}, {"nodeid": "tests/test_lobby.py", "outcome": "passed", "result": [{"nodeid": "tests/test_lobby.py::TestGameRoom", "type": "Class"}, {"nodeid": "tests/test_lobby.py::TestQueueManager", "type": "Class"}, {"nodeid": "tests/test_lobby.py::TestLobbySystem", "type": "Class"}, {"nodeid": "tests/test_lobby.py::test_lobby_matchmaking_integration", "type": "Coroutine", "lineno": 384}]}, {"nodeid": "tests/test_matchmaking.py::TestPlayerProfile", "outcome": "passed", "result": [{"nodeid": "tests/test_matchmaking.py::TestPlayerProfile::test_profile_creation", "type": "Function", "lineno": 9}, {"nodeid": "tests/test_matchmaking.py::TestPlayerProfile::test_update_rating", "type": "Function", "lineno": 24}, {"nodeid": "tests/test_matchmaking.py::TestPlayerProfile::test_update_stats", "type": "Function", "lineno": 43}]}, {"nodeid": "tests/test_matchmaking.py::TestMatchResult", "outcome": "passed", "result": [{"nodeid": "tests/test_matchmaking.py::TestMatchResult::test_match_result_creation", "type": "Function", "lineno": 67}]}, {"nodeid": "tests/test_matchmaking.py::TestMatchmakingEngine", "outcome": "passed", "result": [{"nodeid": "tests/test_matchmaking.py::TestMatchmakingEngine::test_engine_creation", "type": "Function", "lineno": 89}, {"nodeid": "tests/test_matchmaking.py::TestMatchmakingEngine::test_register_player", "type": "Function", "lineno": 98}, {"nodeid": "tests/test_matchmaking.py::TestMatchmakingEngine::test_update_player_profile", "type": "Function", "lineno": 112}, {"nodeid": "tests/test_matchmaking.py::TestMatchmakingEngine::test_create_match", "type": "Function", "lineno": 133}, {"nodeid": "tests/test_matchmaking.py::TestMatchmakingEngine::test_balanced_teams", "type": "Function", "lineno": 156}, {"nodeid": "tests/test_matchmaking.py::TestMatchmakingEngine::test_match_quality_calculation", "type": "Function", "lineno": 184}, {"nodeid": "tests/test_matchmaking.py::TestMatchmakingEngine::test_update_ratings", "type": "Function", "lineno": 208}, {"nodeid": "tests/test_matchmaking.py::TestMatchmakingEngine::test_k_factor_adjustment", "type": "Function", "lineno": 234}, {"nodeid": "tests/test_matchmaking.py::TestMatchmakingEngine::test_find_suitable_opponents", "type": "Function", "lineno": 256}, {"nodeid": "tests/test_matchmaking.py::TestMatchmakingEngine::test_match_scoring", "type": "Function", "lineno": 283}, {"nodeid": "tests/test_matchmaking.py::TestMatchmakingEngine::test_leaderboard", "type": "Function", "lineno": 307}]}, {"nodeid": "tests/test_matchmaking.py", "outcome": "passed", "result": [{"nodeid": "tests/test_matchmaking.py::TestPlayerProfile", "type": "Class"}, {"nodeid": "tests/test_matchmaking.py::TestMatchResult", "type": "Class"}, {"nodeid": "tests/test_matchmaking.py::TestMatchmakingEngine", "type": "Class"}, {"nodeid": "tests/test_matchmaking.py::test_matchmaking_scenarios", "type": "Function", "lineno": 325}]}, {"nodeid": "tests/test_network.py::TestPacket", "outcome": "passed", "result": [{"nodeid": "tests/test_network.py::TestPacket::test_packet_creation", "type": "Function", "lineno": 17}, {"nodeid": "tests/test_network.py::TestPacket::test_packet_serialization", "type": "Function", "lineno": 31}, {"nodeid": "tests/test_network.py::TestPacket::test_create_ack", "type": "Function", "lineno": 49}]}, {"nodeid": "tests/test_network.py::TestNetworkManager", "outcome": "passed", "result": [{"nodeid": "tests/test_network.py::TestNetworkManager::test_manager_initialization", "type": "Coroutine", "lineno": 69}, {"nodeid": "tests/test_network.py::TestNetworkManager::test_start_stop", "type": "Coroutine", "lineno": 78}, {"nodeid": "tests/test_network.py::TestNetworkManager::test_packet_handler_registration", "type": "Coroutine", "lineno": 89}, {"nodeid": "tests/test_network.py::TestNetworkManager::test_send_packet", "type": "Coroutine", "lineno": 101}, {"nodeid": "tests/test_network.py::TestNetworkManager::test_broadcast_packet", "type": "Coroutine", "lineno": 121}]}, {"nodeid": "tests/test_network.py::TestNetworkClient", "outcome": "passed", "result": [{"nodeid": "tests/test_network.py::TestNetworkClient::test_client_initialization", "type": "Coroutine", "lineno": 148}, {"nodeid": "tests/test_network.py::TestNetworkClient::test_send_input", "type": "Coroutine", "lineno": 157}, {"nodeid": "tests/test_network.py::TestNetworkClient::test_send_chat_message", "type": "Coroutine", "lineno": 179}]}, {"nodeid": "tests/test_network.py::TestNetworkServer", "outcome": "passed", "result": [{"nodeid": "tests/test_network.py::TestNetworkServer::test_server_initialization", "type": "Coroutine", "lineno": 203}, {"nodeid": "tests/test_network.py::TestNetworkServer::test_packet_handling", "type": "Coroutine", "lineno": 213}, {"nodeid": "tests/test_network.py::TestNetworkServer::test_client_management", "type": "Coroutine", "lineno": 235}]}, {"nodeid": "tests/test_network.py::TestProtocols", "outcome": "passed", "result": [{"nodeid": "tests/test_network.py::TestProtocols::test_tcp_protocol", "type": "Coroutine", "lineno": 263}, {"nodeid": "tests/test_network.py::TestProtocols::test_udp_protocol", "type": "Coroutine", "lineno": 271}]}, {"nodeid": "tests/test_network.py", "outcome": "passed", "result": [{"nodeid": "tests/test_network.py::TestPacket", "type": "Class"}, {"nodeid": "tests/test_network.py::TestNetworkManager", "type": "Class"}, {"nodeid": "tests/test_network.py::TestNetworkClient", "type": "Class"}, {"nodeid": "tests/test_network.py::TestNetworkServer", "type": "Class"}, {"nodeid": "tests/test_network.py::TestProtocols", "type": "Class"}, {"nodeid": "tests/test_network.py::test_integration_client_server", "type": "Coroutine", "lineno": 280}]}, {"nodeid": "tests/test_spectator.py::TestSpectatorView", "outcome": "passed", "result": [{"nodeid": "tests/test_spectator.py::TestSpectatorView::test_view_creation", "type": "Function", "lineno": 16}, {"nodeid": "tests/test_spectator.py::TestSpectatorView::test_view_mode_switching", "type": "Function", "lineno": 28}, {"nodeid": "tests/test_spectator.py::TestSpectatorView::test_camera_position", "type": "Function", "lineno": 42}]}, {"nodeid": "tests/test_spectator.py::TestSpectatorMode", "outcome": "passed", "result": [{"nodeid": "tests/test_spectator.py::TestSpectatorMode::test_spectator_mode_creation", "type": "Coroutine", "lineno": 55}, {"nodeid": "tests/test_spectator.py::TestSpectatorMode::test_add_remove_spectators", "type": "Function", "lineno": 65}, {"nodeid": "tests/test_spectator.py::TestSpectatorMode::test_max_spectators", "type": "Function", "lineno": 84}, {"nodeid": "tests/test_spectator.py::TestSpectatorMode::test_game_state_update", "type": "Function", "lineno": 94}, {"nodeid": "tests/test_spectator.py::TestSpectatorMode::test_delayed_state", "type": "Function", "lineno": 118}, {"nodeid": "tests/test_spectator.py::TestSpectatorMode::test_view_mode_management", "type": "Function", "lineno": 150}, {"nodeid": "tests/test_spectator.py::TestSpectatorMode::test_camera_updates", "type": "Function", "lineno": 165}, {"nodeid": "tests/test_spectator.py::TestSpectatorMode::test_spectator_list", "type": "Function", "lineno": 181}, {"nodeid": "tests/test_spectator.py::TestSpectatorMode::test_callbacks", "type": "Function", "lineno": 197}]}, {"nodeid": "tests/test_spectator.py::TestReplayRecorder", "outcome": "passed", "result": [{"nodeid": "tests/test_spectator.py::TestReplayRecorder::test_replay_creation", "type": "Function", "lineno": 221}, {"nodeid": "tests/test_spectator.py::TestReplayRecorder::test_record_frames", "type": "Function", "lineno": 230}, {"nodeid": "tests/test_spectator.py::TestReplayRecorder::test_max_frames_limit", "type": "Function", "lineno": 244}, {"nodeid": "tests/test_spectator.py::TestReplayRecorder::test_stop_recording", "type": "Function", "lineno": 257}, {"nodeid": "tests/test_spectator.py::TestReplayRecorder::test_get_frame", "type": "Function", "lineno": 273}, {"nodeid": "tests/test_spectator.py::TestReplayRecorder::test_get_frame_at_time", "type": "Function", "lineno": 289}, {"nodeid": "tests/test_spectator.py::TestReplayRecorder::test_frame_compression", "type": "Function", "lineno": 315}, {"nodeid": "tests/test_spectator.py::TestReplayRecorder::test_replay_save_load", "type": "Function", "lineno": 333}, {"nodeid": "tests/test_spectator.py::TestReplayRecorder::test_get_summary", "type": "Function", "lineno": 360}]}, {"nodeid": "tests/test_spectator.py", "outcome": "passed", "result": [{"nodeid": "tests/test_spectator.py::TestSpectatorView", "type": "Class"}, {"nodeid": "tests/test_spectator.py::TestSpectatorMode", "type": "Class"}, {"nodeid": "tests/test_spectator.py::TestReplayRecorder", "type": "Class"}, {"nodeid": "tests/test_spectator.py::test_spectator_mode_integration", "type": "Coroutine", "lineno": 375}]}, {"nodeid": "tests", "outcome": "passed", "result": [{"nodeid": "tests/test_chat.py", "type": "Module"}, {"nodeid": "tests/test_game_server.py", "type": "Module"}, {"nodeid": "tests/test_integration.py", "type": "Module"}, {"nodeid": "tests/test_lag_compensation.py", "type": "Module"}, {"nodeid": "tests/test_lobby.py", "type": "Module"}, {"nodeid": "tests/test_matchmaking.py", "type": "Module"}, {"nodeid": "tests/test_network.py", "type": "Module"}, {"nodeid": "tests/test_spectator.py", "type": "Module"}]}, {"nodeid": ".", "outcome": "passed", "result": [{"nodeid": "pytermgame", "type": "Package"}, {"nodeid": "pytermgame.egg-info", "type": "Dir"}, {"nodeid": "tests", "type": "Package"}]}], "tests": [{"nodeid": "tests/test_chat.py::TestModerationFilter::test_filter_creation", "lineno": 16, "outcome": "passed", "keywords": ["test_filter_creation", "TestModerationFilter", "test_chat.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 0.00041872262954711914, "outcome": "passed"}, "call": {"duration": 0.00028567761182785034, "outcome": "passed"}, "teardown": {"duration": 0.0001005176454782486, "outcome": "passed"}}, {"nodeid": "tests/test_chat.py::TestModerationFilter::test_profanity_filtering", "lineno": 25, "outcome": "passed", "keywords": ["test_profanity_filtering", "TestModerationFilter", "test_chat.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 0.00011125858873128891, "outcome": "passed"}, "call": {"duration": 0.00040084216743707657, "outcome": "passed"}, "teardown": {"duration": 9.218230843544006e-05, "outcome": "passed"}}, {"nodeid": "tests/test_chat.py::TestModerationFilter::test_rate_limiting", "lineno": 42, "outcome": "passed", "keywords": ["test_rate_limiting", "TestModerationFilter", "test_chat.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 0.00010151322931051254, "outcome": "passed"}, "call": {"duration": 0.00014507956802845, "outcome": "passed"}, "teardown": {"duration": 7.67512246966362e-05, "outcome": "passed"}}, {"nodeid": "tests/test_chat.py::TestModerationFilter::test_player_banning", "lineno": 59, "outcome": "passed", "keywords": ["test_player_banning", "TestModerationFilter", "test_chat.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 9.106006473302841e-05, "outcome": "passed"}, "call": {"duration": 0.00011502858251333237, "outcome": "passed"}, "teardown": {"duration": 7.707346230745316e-05, "outcome": "passed"}}, {"nodeid": "tests/test_chat.py::TestModerationFilter::test_player_muting", "lineno": 79, "outcome": "passed", "keywords": ["test_player_muting", "TestModerationFilter", "test_chat.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 8.896179497241974e-05, "outcome": "passed"}, "call": {"duration": 0.00013724900782108307, "outcome": "passed"}, "teardown": {"duration": 7.280521094799042e-05, "outcome": "passed"}}, {"nodeid": "tests/test_chat.py::TestModerationFilter::test_url_filtering", "lineno": 101, "outcome": "passed", "keywords": ["test_url_filtering", "TestModerationFilter", "test_chat.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 8.724629878997803e-05, "outcome": "passed"}, "call": {"duration": 0.00014562439173460007, "outcome": "passed"}, "teardown": {"duration": 7.304176688194275e-05, "outcome": "passed"}}, {"nodeid": "tests/test_chat.py::TestModerationFilter::test_spam_detection", "lineno": 123, "outcome": "passed", "keywords": ["test_spam_detection", "TestModerationFilter", "test_chat.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 9.526405483484268e-05, "outcome": "passed"}, "call": {"duration": 0.00013693328946828842, "outcome": "passed"}, "teardown": {"duration": 7.170811295509338e-05, "outcome": "passed"}}, {"nodeid": "tests/test_chat.py::TestModerationFilter::test_warning_system", "lineno": 139, "outcome": "failed", "keywords": ["test_warning_system", "TestModerationFilter", "test_chat.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 9.081326425075531e-05, "outcome": "passed"}, "call": {"duration": 0.0002849055454134941, "outcome": "failed", "crash": {"path": "/home/justinchiu_cohere_com/librarybench/projects/terminal_game_engine/terminal_game_engine_multiplayer/tests/test_chat.py", "lineno": 149, "message": "AssertionError: assert <FilterResult.ALLOWED: 'allowed'> == <FilterResult.MODIFIED: 'modified'>\n + where <FilterResult.MODIFIED: 'modified'> = FilterResult.MODIFIED"}, "traceback": [{"path": "tests/test_chat.py", "lineno": 149, "message": "in test_warning_system"}], "longrepr": "tests/test_chat.py:149: in test_warning_system\n assert result == FilterResult.MODIFIED\nE AssertionError: assert <FilterResult.ALLOWED: 'allowed'> == <FilterResult.MODIFIED: 'modified'>\nE + where <FilterResult.MODIFIED: 'modified'> = FilterResult.MODIFIED"}, "teardown": {"duration": 0.00012025050818920135, "outcome": "passed"}}, {"nodeid": "tests/test_chat.py::TestModerationFilter::test_player_status", "lineno": 157, "outcome": "passed", "keywords": ["test_player_status", "TestModerationFilter", "test_chat.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 0.00010540708899497986, "outcome": "passed"}, "call": {"duration": 0.0001311618834733963, "outcome": "passed"}, "teardown": {"duration": 7.995311170816422e-05, "outcome": "passed"}}, {"nodeid": "tests/test_chat.py::TestCommandProcessor::test_processor_creation", "lineno": 182, "outcome": "passed", "keywords": ["test_processor_creation", "TestCommandProcessor", "test_chat.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 9.778887033462524e-05, "outcome": "passed"}, "call": {"duration": 0.00013030972331762314, "outcome": "passed"}, "teardown": {"duration": 7.35502690076828e-05, "outcome": "passed"}}, {"nodeid": "tests/test_chat.py::TestCommandProcessor::test_command_registration", "lineno": 191, "outcome": "passed", "keywords": ["test_command_registration", "TestCommandProcessor", "test_chat.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 8.521229028701782e-05, "outcome": "passed"}, "call": {"duration": 0.00012358464300632477, "outcome": "passed"}, "teardown": {"duration": 7.393583655357361e-05, "outcome": "passed"}}, {"nodeid": "tests/test_chat.py::TestCommandProcessor::test_command_aliases", "lineno": 218, "outcome": "passed", "keywords": ["test_command_aliases", "TestCommandProcessor", "test_chat.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 8.60653817653656e-05, "outcome": "passed"}, "call": {"duration": 0.00011403393000364304, "outcome": "passed"}, "teardown": {"duration": 7.821153849363327e-05, "outcome": "passed"}}, {"nodeid": "tests/test_chat.py::TestCommandProcessor::test_command_permissions", "lineno": 230, "outcome": "passed", "keywords": ["test_command_permissions", "TestCommandProcessor", "test_chat.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 8.531659841537476e-05, "outcome": "passed"}, "call": {"duration": 0.00013290811330080032, "outcome": "passed"}, "teardown": {"duration": 7.219705730676651e-05, "outcome": "passed"}}, {"nodeid": "tests/test_chat.py::TestCommandProcessor::test_help_command", "lineno": 258, "outcome": "passed", "keywords": ["test_help_command", "TestCommandProcessor", "test_chat.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 8.44048336148262e-05, "outcome": "passed"}, "call": {"duration": 0.00011703837662935257, "outcome": "passed"}, "teardown": {"duration": 7.097329944372177e-05, "outcome": "passed"}}, {"nodeid": "tests/test_chat.py::TestCommandProcessor::test_whisper_command", "lineno": 274, "outcome": "passed", "keywords": ["test_whisper_command", "TestCommandProcessor", "test_chat.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 8.293613791465759e-05, "outcome": "passed"}, "call": {"duration": 0.00011989474296569824, "outcome": "passed"}, "teardown": {"duration": 7.070042192935944e-05, "outcome": "passed"}}, {"nodeid": "tests/test_chat.py::TestCommandProcessor::test_moderation_commands", "lineno": 289, "outcome": "passed", "keywords": ["test_moderation_commands", "TestCommandProcessor", "test_chat.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 8.507445454597473e-05, "outcome": "passed"}, "call": {"duration": 0.00011921394616365433, "outcome": "passed"}, "teardown": {"duration": 7.446296513080597e-05, "outcome": "passed"}}, {"nodeid": "tests/test_chat.py::TestChatManager::test_manager_creation", "lineno": 321, "outcome": "passed", "keywords": ["test_manager_creation", "TestChatManager", "test_chat.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 9.308289736509323e-05, "outcome": "passed"}, "call": {"duration": 0.00012806057929992676, "outcome": "passed"}, "teardown": {"duration": 7.21663236618042e-05, "outcome": "passed"}}, {"nodeid": "tests/test_chat.py::TestChatManager::test_process_message", "lineno": 330, "outcome": "passed", "keywords": ["test_process_message", "TestChatManager", "test_chat.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 8.293148130178452e-05, "outcome": "passed"}, "call": {"duration": 0.00023351330310106277, "outcome": "passed"}, "teardown": {"duration": 0.00011715013533830643, "outcome": "passed"}}, {"nodeid": "tests/test_chat.py::TestChatManager::test_command_processing", "lineno": 341, "outcome": "passed", "keywords": ["test_command_processing", "TestChatManager", "test_chat.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 9.974092245101929e-05, "outcome": "passed"}, "call": {"duration": 0.00016896240413188934, "outcome": "passed"}, "teardown": {"duration": 7.573980838060379e-05, "outcome": "passed"}}, {"nodeid": "tests/test_chat.py::TestChatManager::test_moderation_integration", "lineno": 349, "outcome": "passed", "keywords": ["test_moderation_integration", "TestChatManager", "test_chat.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 9.479373693466187e-05, "outcome": "passed"}, "call": {"duration": 0.00017313938587903976, "outcome": "passed"}, "teardown": {"duration": 7.285270839929581e-05, "outcome": "passed"}}, {"nodeid": "tests/test_chat.py::TestChatManager::test_team_chat", "lineno": 366, "outcome": "passed", "keywords": ["test_team_chat", "TestChatManager", "test_chat.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 8.537527173757553e-05, "outcome": "passed"}, "call": {"duration": 0.00015523657202720642, "outcome": "passed"}, "teardown": {"duration": 8.793175220489502e-05, "outcome": "passed"}}, {"nodeid": "tests/test_chat.py::TestChatManager::test_message_history", "lineno": 385, "outcome": "failed", "keywords": ["test_message_history", "TestChatManager", "test_chat.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 9.027216583490372e-05, "outcome": "passed"}, "call": {"duration": 0.000342504121363163, "outcome": "failed", "crash": {"path": "/home/justinchiu_cohere_com/librarybench/projects/terminal_game_engine/terminal_game_engine_multiplayer/tests/test_chat.py", "lineno": 401, "message": "assert False\n + where False = all(<generator object TestChatManager.test_message_history.<locals>.<genexpr> at 0x7f279f12adc0>)"}, "traceback": [{"path": "tests/test_chat.py", "lineno": 401, "message": "in test_message_history"}], "longrepr": "tests/test_chat.py:401: in test_message_history\n assert all(m.player_id == \"player2\" for m in history)\nE assert False\nE + where False = all(<generator object TestChatManager.test_message_history.<locals>.<genexpr> at 0x7f279f12adc0>)"}, "teardown": {"duration": 0.00012152921408414841, "outcome": "passed"}}, {"nodeid": "tests/test_chat.py::TestChatManager::test_callbacks", "lineno": 402, "outcome": "passed", "keywords": ["test_callbacks", "TestChatManager", "test_chat.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 0.00010270904749631882, "outcome": "passed"}, "call": {"duration": 0.0001712106168270111, "outcome": "passed"}, "teardown": {"duration": 8.081737905740738e-05, "outcome": "passed"}}, {"nodeid": "tests/test_chat.py::TestChatManager::test_system_messages", "lineno": 419, "outcome": "passed", "keywords": ["test_system_messages", "TestChatManager", "test_chat.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 9.214598685503006e-05, "outcome": "passed"}, "call": {"duration": 0.00014789775013923645, "outcome": "passed"}, "teardown": {"duration": 7.372535765171051e-05, "outcome": "passed"}}, {"nodeid": "tests/test_chat.py::TestChatManager::test_command_callbacks", "lineno": 435, "outcome": "passed", "keywords": ["test_command_callbacks", "TestChatManager", "test_chat.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 8.896086364984512e-05, "outcome": "passed"}, "call": {"duration": 0.0001329248771071434, "outcome": "passed"}, "teardown": {"duration": 7.30147585272789e-05, "outcome": "passed"}}, {"nodeid": "tests/test_chat.py::TestChatManager::test_private_messages", "lineno": 453, "outcome": "passed", "keywords": ["test_private_messages", "TestChatManager", "test_chat.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 9.070709347724915e-05, "outcome": "passed"}, "call": {"duration": 0.00015993043780326843, "outcome": "passed"}, "teardown": {"duration": 7.952656596899033e-05, "outcome": "passed"}}, {"nodeid": "tests/test_chat.py::test_chat_integration", "lineno": 473, "outcome": "passed", "keywords": ["test_chat_integration", "asyncio", "pytestmark", "test_chat.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 0.00037901196628808975, "outcome": "passed"}, "call": {"duration": 0.0003385096788406372, "outcome": "passed"}, "teardown": {"duration": 0.00020969007164239883, "outcome": "passed"}}, {"nodeid": "tests/test_game_server.py::TestGameState::test_game_state_creation", "lineno": 15, "outcome": "passed", "keywords": ["test_game_state_creation", "TestGameState", "test_game_server.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 0.00010106340050697327, "outcome": "passed"}, "call": {"duration": 0.00012487731873989105, "outcome": "passed"}, "teardown": {"duration": 7.489509880542755e-05, "outcome": "passed"}}, {"nodeid": "tests/test_game_server.py::TestGameState::test_add_remove_player", "lineno": 25, "outcome": "passed", "keywords": ["test_add_remove_player", "TestGameState", "test_game_server.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 8.637458086013794e-05, "outcome": "passed"}, "call": {"duration": 0.00012071430683135986, "outcome": "passed"}, "teardown": {"duration": 7.17630609869957e-05, "outcome": "passed"}}, {"nodeid": "tests/test_game_server.py::TestGameState::test_update_player_position", "lineno": 44, "outcome": "passed", "keywords": ["test_update_player_position", "TestGameState", "test_game_server.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 8.58306884765625e-05, "outcome": "passed"}, "call": {"duration": 0.00013305246829986572, "outcome": "passed"}, "teardown": {"duration": 7.28340819478035e-05, "outcome": "passed"}}, {"nodeid": "tests/test_game_server.py::TestGameState::test_game_objects", "lineno": 57, "outcome": "passed", "keywords": ["test_game_objects", "TestGameState", "test_game_server.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 8.290261030197144e-05, "outcome": "passed"}, "call": {"duration": 0.0001374436542391777, "outcome": "passed"}, "teardown": {"duration": 7.961038500070572e-05, "outcome": "passed"}}, {"nodeid": "tests/test_game_server.py::TestGameState::test_validate_player_input", "lineno": 80, "outcome": "passed", "keywords": ["test_validate_player_input", "TestGameState", "test_game_server.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 8.360203355550766e-05, "outcome": "passed"}, "call": {"duration": 0.00012751668691635132, "outcome": "passed"}, "teardown": {"duration": 7.544457912445068e-05, "outcome": "passed"}}, {"nodeid": "tests/test_game_server.py::TestGameState::test_apply_physics", "lineno": 101, "outcome": "passed", "keywords": ["test_apply_physics", "TestGameState", "test_game_server.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 8.595548570156097e-05, "outcome": "passed"}, "call": {"duration": 0.00011459458619356155, "outcome": "passed"}, "teardown": {"duration": 7.094349712133408e-05, "outcome": "passed"}}, {"nodeid": "tests/test_game_server.py::TestGameState::test_serialize_for_client", "lineno": 116, "outcome": "passed", "keywords": ["test_serialize_for_client", "TestGameState", "test_game_server.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 8.074752986431122e-05, "outcome": "passed"}, "call": {"duration": 0.0001751454547047615, "outcome": "passed"}, "teardown": {"duration": 7.444992661476135e-05, "outcome": "passed"}}, {"nodeid": "tests/test_game_server.py::TestTickManager::test_tick_manager_creation", "lineno": 137, "outcome": "passed", "keywords": ["test_tick_manager_creation", "TestTickManager", "test_game_server.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 8.556433022022247e-05, "outcome": "passed"}, "call": {"duration": 0.00010806508362293243, "outcome": "passed"}, "teardown": {"duration": 7.101800292730331e-05, "outcome": "passed"}}, {"nodeid": "tests/test_game_server.py::TestTickManager::test_tick_callbacks", "lineno": 146, "outcome": "passed", "keywords": ["test_tick_callbacks", "asyncio", "pytestmark", "TestTickManager", "test_game_server.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 0.00021730083972215652, "outcome": "passed"}, "call": {"duration": 0.15054803993552923, "outcome": "passed"}, "teardown": {"duration": 0.00021926872432231903, "outcome": "passed"}}, {"nodeid": "tests/test_game_server.py::TestTickManager::test_tick_stats", "lineno": 165, "outcome": "passed", "keywords": ["test_tick_stats", "TestTickManager", "test_game_server.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 0.00010079238563776016, "outcome": "passed"}, "call": {"duration": 0.00010494422167539597, "outcome": "passed"}, "teardown": {"duration": 7.921736687421799e-05, "outcome": "passed"}}, {"nodeid": "tests/test_game_server.py::TestGameServer::test_server_initialization", "lineno": 178, "outcome": "passed", "keywords": ["test_server_initialization", "asyncio", "pytestmark", "TestGameServer", "test_game_server.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 0.00022225268185138702, "outcome": "passed"}, "call": {"duration": 0.00019908975809812546, "outcome": "passed"}, "teardown": {"duration": 0.0001709330826997757, "outcome": "passed"}}, {"nodeid": "tests/test_game_server.py::TestGameServer::test_player_management", "lineno": 188, "outcome": "failed", "keywords": ["test_player_management", "asyncio", "pytestmark", "TestGameServer", "test_game_server.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 0.00021025817841291428, "outcome": "passed"}, "call": {"duration": 0.011566114611923695, "outcome": "failed", "crash": {"path": "/home/justinchiu_cohere_com/librarybench/projects/terminal_game_engine/terminal_game_engine_multiplayer/pytermgame/server/game_server.py", "lineno": 192, "message": "TypeError: '>=' not supported between instances of 'list' and 'int'"}, "traceback": [{"path": "tests/test_game_server.py", "lineno": 195, "message": "in test_player_management"}, {"path": "pytermgame/server/game_server.py", "lineno": 192, "message": "in add_player"}], "log": [{"name": "asyncio", "msg": "Task was destroyed but it is pending!\ntask: <Task pending name='Task-4' coro=<TickManager._tick_loop() done, defined at /home/justinchiu_cohere_com/librarybench/projects/terminal_game_engine/terminal_game_engine_multiplayer/pytermgame/server/tick_manager.py:46> wait_for=<Future pending cb=[Task.task_wakeup()]>>", "args": null, "levelname": "ERROR", "levelno": 40, "pathname": "/home/justinchiu_cohere_com/.local/share/uv/python/cpython-3.12.9-linux-x86_64-gnu/lib/python3.12/asyncio/base_events.py", "filename": "base_events.py", "module": "base_events", "exc_info": null, "exc_text": null, "stack_info": null, "lineno": 1833, "funcName": "default_exception_handler", "created": 1752370480.6852646, "msecs": 685.0, "relativeCreated": 456.12192153930664, "thread": 139808178792256, "threadName": "MainThread", "processName": "MainProcess", "process": 217851, "taskName": "Task-8"}], "longrepr": "tests/test_game_server.py:195: in test_player_management\n success = await server.add_player(\"player1\", \"client1\")\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\npytermgame/server/game_server.py:192: in add_player\n if self.game_state.get_active_players() >= self.max_players:\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nE TypeError: '>=' not supported between instances of 'list' and 'int'"}, "teardown": {"duration": 0.00021020881831645966, "outcome": "passed"}}, {"nodeid": "tests/test_game_server.py::TestGameServer::test_input_handling", "lineno": 210, "outcome": "failed", "keywords": ["test_input_handling", "asyncio", "pytestmark", "TestGameServer", "test_game_server.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 0.00024155713617801666, "outcome": "passed"}, "call": {"duration": 0.00021127890795469284, "outcome": "failed", "crash": {"path": "/home/justinchiu_cohere_com/librarybench/projects/terminal_game_engine/terminal_game_engine_multiplayer/pytermgame/server/game_server.py", "lineno": 192, "message": "TypeError: '>=' not supported between instances of 'list' and 'int'"}, "traceback": [{"path": "tests/test_game_server.py", "lineno": 215, "message": "in test_input_handling"}, {"path": "pytermgame/server/game_server.py", "lineno": 192, "message": "in add_player"}], "longrepr": "tests/test_game_server.py:215: in test_input_handling\n await server.add_player(\"player1\", \"client1\")\npytermgame/server/game_server.py:192: in add_player\n if self.game_state.get_active_players() >= self.max_players:\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nE TypeError: '>=' not supported between instances of 'list' and 'int'"}, "teardown": {"duration": 0.00020111631602048874, "outcome": "passed"}}, {"nodeid": "tests/test_game_server.py::TestGameServer::test_chat_handling", "lineno": 239, "outcome": "failed", "keywords": ["test_chat_handling", "asyncio", "pytestmark", "TestGameServer", "test_game_server.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 0.0002380330115556717, "outcome": "passed"}, "call": {"duration": 0.00021082069724798203, "outcome": "failed", "crash": {"path": "/home/justinchiu_cohere_com/librarybench/projects/terminal_game_engine/terminal_game_engine_multiplayer/pytermgame/server/game_server.py", "lineno": 192, "message": "TypeError: '>=' not supported between instances of 'list' and 'int'"}, "traceback": [{"path": "tests/test_game_server.py", "lineno": 244, "message": "in test_chat_handling"}, {"path": "pytermgame/server/game_server.py", "lineno": 192, "message": "in add_player"}], "longrepr": "tests/test_game_server.py:244: in test_chat_handling\n await server.add_player(\"player1\", \"client1\")\npytermgame/server/game_server.py:192: in add_player\n if self.game_state.get_active_players() >= self.max_players:\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nE TypeError: '>=' not supported between instances of 'list' and 'int'"}, "teardown": {"duration": 0.00020131655037403107, "outcome": "passed"}}, {"nodeid": "tests/test_game_server.py::TestGameServer::test_game_tick_processing", "lineno": 262, "outcome": "passed", "keywords": ["test_game_tick_processing", "asyncio", "pytestmark", "TestGameServer", "test_game_server.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 0.00022322218865156174, "outcome": "passed"}, "call": {"duration": 0.0002331174910068512, "outcome": "passed"}, "teardown": {"duration": 0.0001532500609755516, "outcome": "passed"}}, {"nodeid": "tests/test_game_server.py::TestGameServer::test_server_stats", "lineno": 282, "outcome": "passed", "keywords": ["test_server_stats", "TestGameServer", "test_game_server.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 9.151268750429153e-05, "outcome": "passed"}, "call": {"duration": 0.00012670084834098816, "outcome": "passed"}, "teardown": {"duration": 8.506700396537781e-05, "outcome": "passed"}}, {"nodeid": "tests/test_game_server.py::test_game_server_integration", "lineno": 294, "outcome": "failed", "keywords": ["test_game_server_integration", "asyncio", "pytestmark", "test_game_server.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 0.000202142633497715, "outcome": "passed"}, "call": {"duration": 0.00022035837173461914, "outcome": "failed", "crash": {"path": "/home/justinchiu_cohere_com/librarybench/projects/terminal_game_engine/terminal_game_engine_multiplayer/pytermgame/server/game_server.py", "lineno": 192, "message": "TypeError: '>=' not supported between instances of 'list' and 'int'"}, "traceback": [{"path": "tests/test_game_server.py", "lineno": 310, "message": "in test_game_server_integration"}, {"path": "pytermgame/server/game_server.py", "lineno": 192, "message": "in add_player"}], "longrepr": "tests/test_game_server.py:310: in test_game_server_integration\n await server.add_player(\"player1\", \"client1\")\npytermgame/server/game_server.py:192: in add_player\n if self.game_state.get_active_players() >= self.max_players:\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nE TypeError: '>=' not supported between instances of 'list' and 'int'"}, "teardown": {"duration": 0.00020120572298765182, "outcome": "passed"}}, {"nodeid": "tests/test_integration.py::test_full_game_flow", "lineno": 17, "outcome": "failed", "keywords": ["test_full_game_flow", "asyncio", "pytestmark", "test_integration.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 0.00023705698549747467, "outcome": "passed"}, "call": {"duration": 2.5013688392937183, "outcome": "failed", "crash": {"path": "/home/justinchiu_cohere_com/librarybench/projects/terminal_game_engine/terminal_game_engine_multiplayer/tests/test_integration.py", "lineno": 46, "message": "assert 0 > 0\n + where 0 = len({})\n + where {} = <pytermgame.lobby.lobby_system.LobbySystem object at 0x7f279f0f16a0>.rooms"}, "traceback": [{"path": "tests/test_integration.py", "lineno": 46, "message": "in test_full_game_flow"}], "longrepr": "tests/test_integration.py:46: in test_full_game_flow\n assert len(lobby.rooms) > 0\nE assert 0 > 0\nE + where 0 = len({})\nE + where {} = <pytermgame.lobby.lobby_system.LobbySystem object at 0x7f279f0f16a0>.rooms"}, "teardown": {"duration": 0.00030442606657743454, "outcome": "passed"}}, {"nodeid": "tests/test_integration.py::test_spectator_and_chat_integration", "lineno": 86, "outcome": "failed", "keywords": ["test_spectator_and_chat_integration", "asyncio", "pytestmark", "test_integration.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 0.0002945363521575928, "outcome": "passed"}, "call": {"duration": 0.0006019230931997299, "outcome": "failed", "crash": {"path": "/home/justinchiu_cohere_com/librarybench/projects/terminal_game_engine/terminal_game_engine_multiplayer/pytermgame/server/game_server.py", "lineno": 192, "message": "TypeError: '>=' not supported between instances of 'list' and 'int'"}, "traceback": [{"path": "tests/test_integration.py", "lineno": 100, "message": "in test_spectator_and_chat_integration"}, {"path": "pytermgame/server/game_server.py", "lineno": 192, "message": "in add_player"}], "longrepr": "tests/test_integration.py:100: in test_spectator_and_chat_integration\n await game_server.add_player(f\"player{i}\", f\"client{i}\")\npytermgame/server/game_server.py:192: in add_player\n if self.game_state.get_active_players() >= self.max_players:\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nE TypeError: '>=' not supported between instances of 'list' and 'int'"}, "teardown": {"duration": 0.0002208547666668892, "outcome": "passed"}}, {"nodeid": "tests/test_integration.py::test_lag_compensation_gameplay", "lineno": 154, "outcome": "failed", "keywords": ["test_lag_compensation_gameplay", "asyncio", "pytestmark", "test_integration.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 0.00023369025439023972, "outcome": "passed"}, "call": {"duration": 0.00034114159643650055, "outcome": "failed", "crash": {"path": "/home/justinchiu_cohere_com/.local/share/uv/python/cpython-3.12.9-linux-x86_64-gnu/lib/python3.12/asyncio/base_events.py", "lineno": 1584, "message": "OSError: [Errno 98] error while attempting to bind on address ('0.0.0.0', 8888): [errno 98] address already in use"}, "traceback": [{"path": "tests/test_integration.py", "lineno": 162, "message": "in test_lag_compensation_gameplay"}, {"path": "pytermgame/server/game_server.py", "lineno": 49, "message": "in start"}, {"path": "pytermgame/network/server.py", "lineno": 31, "message": "in start"}, {"path": "../../../../.local/share/uv/python/cpython-3.12.9-linux-x86_64-gnu/lib/python3.12/asyncio/streams.py", "lineno": 84, "message": "in start_server"}, {"path": "../../../../.local/share/uv/python/cpython-3.12.9-linux-x86_64-gnu/lib/python3.12/asyncio/base_events.py", "lineno": 1584, "message": "in create_server"}], "longrepr": "tests/test_integration.py:162: in test_lag_compensation_gameplay\n await game_server.start()\npytermgame/server/game_server.py:49: in start\n await self.network_server.start()\npytermgame/network/server.py:31: in start\n self.server = await asyncio.start_server(\n../../../../.local/share/uv/python/cpython-3.12.9-linux-x86_64-gnu/lib/python3.12/asyncio/streams.py:84: in start_server\n return await loop.create_server(factory, host, port, **kwds)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n../../../../.local/share/uv/python/cpython-3.12.9-linux-x86_64-gnu/lib/python3.12/asyncio/base_events.py:1584: in create_server\n raise OSError(err.errno, msg) from None\nE OSError: [Errno 98] error while attempting to bind on address ('0.0.0.0', 8888): [errno 98] address already in use"}, "teardown": {"duration": 0.00022916309535503387, "outcome": "passed"}}, {"nodeid": "tests/test_integration.py::test_network_resilience", "lineno": 235, "outcome": "failed", "keywords": ["test_network_resilience", "asyncio", "pytestmark", "test_integration.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 0.00024116411805152893, "outcome": "passed"}, "call": {"duration": 0.00046214740723371506, "outcome": "failed", "crash": {"path": "/home/justinchiu_cohere_com/librarybench/projects/terminal_game_engine/terminal_game_engine_multiplayer/tests/test_integration.py", "lineno": 266, "message": "assert False is True"}, "traceback": [{"path": "tests/test_integration.py", "lineno": 266, "message": "in test_network_resilience"}], "longrepr": "tests/test_integration.py:266: in test_network_resilience\n assert connected is True\nE assert False is True"}, "teardown": {"duration": 0.0002116793766617775, "outcome": "passed"}}, {"nodeid": "tests/test_integration.py::test_performance_under_load", "lineno": 279, "outcome": "failed", "keywords": ["test_performance_under_load", "asyncio", "pytestmark", "test_integration.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 0.00022261124104261398, "outcome": "passed"}, "call": {"duration": 0.00043859053403139114, "outcome": "failed", "crash": {"path": "/home/justinchiu_cohere_com/librarybench/projects/terminal_game_engine/terminal_game_engine_multiplayer/pytermgame/server/game_server.py", "lineno": 192, "message": "TypeError: '>=' not supported between instances of 'list' and 'int'"}, "traceback": [{"path": "tests/test_integration.py", "lineno": 293, "message": "in test_performance_under_load"}, {"path": "pytermgame/server/game_server.py", "lineno": 192, "message": "in add_player"}], "longrepr": "tests/test_integration.py:293: in test_performance_under_load\n await game_server.add_player(f\"player{i}\", f\"client{i}\")\npytermgame/server/game_server.py:192: in add_player\n if self.game_state.get_active_players() >= self.max_players:\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nE TypeError: '>=' not supported between instances of 'list' and 'int'"}, "teardown": {"duration": 0.00021637044847011566, "outcome": "passed"}}, {"nodeid": "tests/test_integration.py::test_error_recovery", "lineno": 338, "outcome": "failed", "keywords": ["test_error_recovery", "asyncio", "pytestmark", "test_integration.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 0.00023290980607271194, "outcome": "passed"}, "call": {"duration": 0.0003297599032521248, "outcome": "failed", "crash": {"path": "/home/justinchiu_cohere_com/.local/share/uv/python/cpython-3.12.9-linux-x86_64-gnu/lib/python3.12/asyncio/base_events.py", "lineno": 1584, "message": "OSError: [Errno 98] error while attempting to bind on address ('0.0.0.0', 8888): [errno 98] address already in use"}, "traceback": [{"path": "tests/test_integration.py", "lineno": 346, "message": "in test_error_recovery"}, {"path": "pytermgame/server/game_server.py", "lineno": 49, "message": "in start"}, {"path": "pytermgame/network/server.py", "lineno": 31, "message": "in start"}, {"path": "../../../../.local/share/uv/python/cpython-3.12.9-linux-x86_64-gnu/lib/python3.12/asyncio/streams.py", "lineno": 84, "message": "in start_server"}, {"path": "../../../../.local/share/uv/python/cpython-3.12.9-linux-x86_64-gnu/lib/python3.12/asyncio/base_events.py", "lineno": 1584, "message": "in create_server"}], "longrepr": "tests/test_integration.py:346: in test_error_recovery\n await game_server.start()\npytermgame/server/game_server.py:49: in start\n await self.network_server.start()\npytermgame/network/server.py:31: in start\n self.server = await asyncio.start_server(\n../../../../.local/share/uv/python/cpython-3.12.9-linux-x86_64-gnu/lib/python3.12/asyncio/streams.py:84: in start_server\n return await loop.create_server(factory, host, port, **kwds)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n../../../../.local/share/uv/python/cpython-3.12.9-linux-x86_64-gnu/lib/python3.12/asyncio/base_events.py:1584: in create_server\n raise OSError(err.errno, msg) from None\nE OSError: [Errno 98] error while attempting to bind on address ('0.0.0.0', 8888): [errno 98] address already in use"}, "teardown": {"duration": 0.00021829921752214432, "outcome": "passed"}}, {"nodeid": "tests/test_integration.py::test_data_consistency", "lineno": 383, "outcome": "passed", "keywords": ["test_data_consistency", "test_integration.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 0.00010670814663171768, "outcome": "passed"}, "call": {"duration": 0.00026786886155605316, "outcome": "passed"}, "teardown": {"duration": 8.59927386045456e-05, "outcome": "passed"}}, {"nodeid": "tests/test_lag_compensation.py::TestClientPrediction::test_prediction_creation", "lineno": 17, "outcome": "passed", "keywords": ["test_prediction_creation", "TestClientPrediction", "test_lag_compensation.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 9.63360071182251e-05, "outcome": "passed"}, "call": {"duration": 9.639747440814972e-05, "outcome": "passed"}, "teardown": {"duration": 8.837878704071045e-05, "outcome": "passed"}}, {"nodeid": "tests/test_lag_compensation.py::TestClientPrediction::test_predict_movement", "lineno": 26, "outcome": "passed", "keywords": ["test_predict_movement", "TestClientPrediction", "test_lag_compensation.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 8.70702788233757e-05, "outcome": "passed"}, "call": {"duration": 0.00011363159865140915, "outcome": "passed"}, "teardown": {"duration": 7.643643766641617e-05, "outcome": "passed"}}, {"nodeid": "tests/test_lag_compensation.py::TestClientPrediction::test_confirm_state", "lineno": 49, "outcome": "passed", "keywords": ["test_confirm_state", "TestClientPrediction", "test_lag_compensation.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 8.902791887521744e-05, "outcome": "passed"}, "call": {"duration": 0.00016404688358306885, "outcome": "passed"}, "teardown": {"duration": 7.424689829349518e-05, "outcome": "passed"}}, {"nodeid": "tests/test_lag_compensation.py::TestClientPrediction::test_corrected_position", "lineno": 75, "outcome": "passed", "keywords": ["test_corrected_position", "TestClientPrediction", "test_lag_compensation.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 8.566305041313171e-05, "outcome": "passed"}, "call": {"duration": 0.0001142667606472969, "outcome": "passed"}, "teardown": {"duration": 7.169041782617569e-05, "outcome": "passed"}}, {"nodeid": "tests/test_lag_compensation.py::TestClientPrediction::test_prediction_error", "lineno": 104, "outcome": "passed", "keywords": ["test_prediction_error", "TestClientPrediction", "test_lag_compensation.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 8.287932723760605e-05, "outcome": "passed"}, "call": {"duration": 0.0004984624683856964, "outcome": "passed"}, "teardown": {"duration": 8.999370038509369e-05, "outcome": "passed"}}, {"nodeid": "tests/test_lag_compensation.py::TestClientPrediction::test_disable_prediction", "lineno": 136, "outcome": "passed", "keywords": ["test_disable_prediction", "TestClientPrediction", "test_lag_compensation.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 9.270384907722473e-05, "outcome": "passed"}, "call": {"duration": 9.489897638559341e-05, "outcome": "passed"}, "teardown": {"duration": 7.452070713043213e-05, "outcome": "passed"}}, {"nodeid": "tests/test_lag_compensation.py::TestServerReconciliation::test_reconciliation_creation", "lineno": 154, "outcome": "passed", "keywords": ["test_reconciliation_creation", "TestServerReconciliation", "test_lag_compensation.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 8.749403059482574e-05, "outcome": "passed"}, "call": {"duration": 8.845329284667969e-05, "outcome": "passed"}, "teardown": {"duration": 7.277354598045349e-05, "outcome": "passed"}}, {"nodeid": "tests/test_lag_compensation.py::TestServerReconciliation::test_record_player_state", "lineno": 162, "outcome": "passed", "keywords": ["test_record_player_state", "TestServerReconciliation", "test_lag_compensation.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 9.313970804214478e-05, "outcome": "passed"}, "call": {"duration": 0.00012761633843183517, "outcome": "passed"}, "teardown": {"duration": 7.579755038022995e-05, "outcome": "passed"}}, {"nodeid": "tests/test_lag_compensation.py::TestServerReconciliation::test_get_player_at_time", "lineno": 183, "outcome": "failed", "keywords": ["test_get_player_at_time", "TestServerReconciliation", "test_lag_compensation.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 8.71904194355011e-05, "outcome": "passed"}, "call": {"duration": 0.00011362694203853607, "outcome": "failed", "crash": {"path": "/home/justinchiu_cohere_com/librarybench/projects/terminal_game_engine/terminal_game_engine_multiplayer/tests/test_lag_compensation.py", "lineno": 198, "message": "KeyError: 'player1'"}, "traceback": [{"path": "tests/test_lag_compensation.py", "lineno": 198, "message": "in test_get_player_at_time"}], "longrepr": "tests/test_lag_compensation.py:198: in test_get_player_at_time\n recon.player_history[\"player1\"].append(snapshot)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nE KeyError: 'player1'"}, "teardown": {"duration": 0.00013054907321929932, "outcome": "passed"}}, {"nodeid": "tests/test_lag_compensation.py::TestServerReconciliation::test_verify_hit", "lineno": 209, "outcome": "passed", "keywords": ["test_verify_hit", "TestServerReconciliation", "test_lag_compensation.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 0.00010146200656890869, "outcome": "passed"}, "call": {"duration": 0.00012326613068580627, "outcome": "passed"}, "teardown": {"duration": 7.425900548696518e-05, "outcome": "passed"}}, {"nodeid": "tests/test_lag_compensation.py::TestServerReconciliation::test_rewind_limit", "lineno": 243, "outcome": "passed", "keywords": ["test_rewind_limit", "TestServerReconciliation", "test_lag_compensation.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 8.746329694986343e-05, "outcome": "passed"}, "call": {"duration": 0.0001026056706905365, "outcome": "passed"}, "teardown": {"duration": 7.352139800786972e-05, "outcome": "passed"}}, {"nodeid": "tests/test_lag_compensation.py::TestServerReconciliation::test_validate_player_input", "lineno": 261, "outcome": "passed", "keywords": ["test_validate_player_input", "TestServerReconciliation", "test_lag_compensation.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 8.234940469264984e-05, "outcome": "passed"}, "call": {"duration": 0.00010906346142292023, "outcome": "passed"}, "teardown": {"duration": 7.335282862186432e-05, "outcome": "passed"}}, {"nodeid": "tests/test_lag_compensation.py::TestServerReconciliation::test_world_state_at_time", "lineno": 291, "outcome": "passed", "keywords": ["test_world_state_at_time", "TestServerReconciliation", "test_lag_compensation.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 8.539669215679169e-05, "outcome": "passed"}, "call": {"duration": 0.00010721199214458466, "outcome": "passed"}, "teardown": {"duration": 7.457006722688675e-05, "outcome": "passed"}}, {"nodeid": "tests/test_lag_compensation.py::TestInterpolator::test_interpolator_creation", "lineno": 312, "outcome": "passed", "keywords": ["test_interpolator_creation", "TestInterpolator", "test_lag_compensation.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 9.375810623168945e-05, "outcome": "passed"}, "call": {"duration": 8.768029510974884e-05, "outcome": "passed"}, "teardown": {"duration": 7.038470357656479e-05, "outcome": "passed"}}, {"nodeid": "tests/test_lag_compensation.py::TestInterpolator::test_update_entity", "lineno": 320, "outcome": "passed", "keywords": ["test_update_entity", "TestInterpolator", "test_lag_compensation.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 8.210539817810059e-05, "outcome": "passed"}, "call": {"duration": 0.00012570712715387344, "outcome": "passed"}, "teardown": {"duration": 7.088575512170792e-05, "outcome": "passed"}}, {"nodeid": "tests/test_lag_compensation.py::TestInterpolator::test_interpolated_position", "lineno": 339, "outcome": "passed", "keywords": ["test_interpolated_position", "TestInterpolator", "test_lag_compensation.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 8.39838758111e-05, "outcome": "passed"}, "call": {"duration": 0.0001504030078649521, "outcome": "passed"}, "teardown": {"duration": 7.340218871831894e-05, "outcome": "passed"}}, {"nodeid": "tests/test_lag_compensation.py::TestInterpolator::test_smoothing_disabled", "lineno": 366, "outcome": "passed", "keywords": ["test_smoothing_disabled", "TestInterpolator", "test_lag_compensation.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 8.464418351650238e-05, "outcome": "passed"}, "call": {"duration": 0.00010457448661327362, "outcome": "passed"}, "teardown": {"duration": 6.963592022657394e-05, "outcome": "passed"}}, {"nodeid": "tests/test_lag_compensation.py::TestInterpolator::test_custom_delay", "lineno": 378, "outcome": "passed", "keywords": ["test_custom_delay", "TestInterpolator", "test_lag_compensation.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 8.602440357208252e-05, "outcome": "passed"}, "call": {"duration": 0.00012168195098638535, "outcome": "passed"}, "teardown": {"duration": 7.233023643493652e-05, "outcome": "passed"}}, {"nodeid": "tests/test_lag_compensation.py::TestInterpolator::test_remove_entity", "lineno": 389, "outcome": "passed", "keywords": ["test_remove_entity", "TestInterpolator", "test_lag_compensation.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 8.984841406345367e-05, "outcome": "passed"}, "call": {"duration": 0.0001001451164484024, "outcome": "passed"}, "teardown": {"duration": 7.189810276031494e-05, "outcome": "passed"}}, {"nodeid": "tests/test_lag_compensation.py::TestLagCompensator::test_compensator_creation", "lineno": 403, "outcome": "passed", "keywords": ["test_compensator_creation", "TestLagCompensator", "test_lag_compensation.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 8.625257760286331e-05, "outcome": "passed"}, "call": {"duration": 8.514430373907089e-05, "outcome": "passed"}, "teardown": {"duration": 6.897374987602234e-05, "outcome": "passed"}}, {"nodeid": "tests/test_lag_compensation.py::TestLagCompensator::test_client_prediction_integration", "lineno": 412, "outcome": "passed", "keywords": ["test_client_prediction_integration", "TestLagCompensator", "test_lag_compensation.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 8.756294846534729e-05, "outcome": "passed"}, "call": {"duration": 0.00011423882097005844, "outcome": "passed"}, "teardown": {"duration": 6.983987987041473e-05, "outcome": "passed"}}, {"nodeid": "tests/test_lag_compensation.py::TestLagCompensator::test_server_reconciliation_integration", "lineno": 435, "outcome": "passed", "keywords": ["test_server_reconciliation_integration", "TestLagCompensator", "test_lag_compensation.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 8.307769894599915e-05, "outcome": "passed"}, "call": {"duration": 0.00010994356125593185, "outcome": "passed"}, "teardown": {"duration": 7.068086415529251e-05, "outcome": "passed"}}, {"nodeid": "tests/test_lag_compensation.py::TestLagCompensator::test_interpolation_integration", "lineno": 468, "outcome": "passed", "keywords": ["test_interpolation_integration", "TestLagCompensator", "test_lag_compensation.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 8.341111242771149e-05, "outcome": "passed"}, "call": {"duration": 0.0001316135749220848, "outcome": "passed"}, "teardown": {"duration": 7.008761167526245e-05, "outcome": "passed"}}, {"nodeid": "tests/test_lag_compensation.py::TestLagCompensator::test_extrapolation", "lineno": 490, "outcome": "passed", "keywords": ["test_extrapolation", "TestLagCompensator", "test_lag_compensation.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 8.601322770118713e-05, "outcome": "passed"}, "call": {"duration": 9.114574640989304e-05, "outcome": "passed"}, "teardown": {"duration": 6.84838742017746e-05, "outcome": "passed"}}, {"nodeid": "tests/test_lag_compensation.py::TestLagCompensator::test_metrics", "lineno": 507, "outcome": "failed", "keywords": ["test_metrics", "TestLagCompensator", "test_lag_compensation.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 8.257385343313217e-05, "outcome": "passed"}, "call": {"duration": 0.00020986143499612808, "outcome": "failed", "crash": {"path": "/home/justinchiu_cohere_com/librarybench/projects/terminal_game_engine/terminal_game_engine_multiplayer/tests/test_lag_compensation.py", "lineno": 523, "message": "assert 0.0 > 0"}, "traceback": [{"path": "tests/test_lag_compensation.py", "lineno": 523, "message": "in test_metrics"}], "longrepr": "tests/test_lag_compensation.py:523: in test_metrics\n assert metrics[\"average_prediction_error\"] > 0\nE assert 0.0 > 0"}, "teardown": {"duration": 0.00011733919382095337, "outcome": "passed"}}, {"nodeid": "tests/test_lag_compensation.py::TestLagCompensator::test_reset_player", "lineno": 527, "outcome": "passed", "keywords": ["test_reset_player", "TestLagCompensator", "test_lag_compensation.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 0.00010052602738142014, "outcome": "passed"}, "call": {"duration": 0.00013178307563066483, "outcome": "passed"}, "teardown": {"duration": 7.930584251880646e-05, "outcome": "passed"}}, {"nodeid": "tests/test_lag_compensation.py::TestLagCompensator::test_disable_features", "lineno": 543, "outcome": "passed", "keywords": ["test_disable_features", "TestLagCompensator", "test_lag_compensation.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 8.8459812104702e-05, "outcome": "passed"}, "call": {"duration": 0.00010898243635892868, "outcome": "passed"}, "teardown": {"duration": 7.845181971788406e-05, "outcome": "passed"}}, {"nodeid": "tests/test_lag_compensation.py::test_lag_compensation_integration", "lineno": 564, "outcome": "passed", "keywords": ["test_lag_compensation_integration", "asyncio", "pytestmark", "test_lag_compensation.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 0.0002315416932106018, "outcome": "passed"}, "call": {"duration": 0.00028617028146982193, "outcome": "passed"}, "teardown": {"duration": 0.00016206689178943634, "outcome": "passed"}}, {"nodeid": "tests/test_lobby.py::TestGameRoom::test_room_creation", "lineno": 16, "outcome": "passed", "keywords": ["test_room_creation", "TestGameRoom", "test_lobby.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 9.51569527387619e-05, "outcome": "passed"}, "call": {"duration": 0.00013398099690675735, "outcome": "passed"}, "teardown": {"duration": 7.646530866622925e-05, "outcome": "passed"}}, {"nodeid": "tests/test_lobby.py::TestGameRoom::test_add_remove_players", "lineno": 31, "outcome": "passed", "keywords": ["test_add_remove_players", "TestGameRoom", "test_lobby.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 8.525047451257706e-05, "outcome": "passed"}, "call": {"duration": 0.00011562183499336243, "outcome": "passed"}, "teardown": {"duration": 7.124058902263641e-05, "outcome": "passed"}}, {"nodeid": "tests/test_lobby.py::TestGameRoom::test_ready_status", "lineno": 54, "outcome": "passed", "keywords": ["test_ready_status", "TestGameRoom", "test_lobby.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 0.00010398402810096741, "outcome": "passed"}, "call": {"duration": 0.00014644954353570938, "outcome": "passed"}, "teardown": {"duration": 7.493048906326294e-05, "outcome": "passed"}}, {"nodeid": "tests/test_lobby.py::TestGameRoom::test_host_migration", "lineno": 75, "outcome": "passed", "keywords": ["test_host_migration", "TestGameRoom", "test_lobby.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 8.596573024988174e-05, "outcome": "passed"}, "call": {"duration": 0.00012361537665128708, "outcome": "passed"}, "teardown": {"duration": 7.963087409734726e-05, "outcome": "passed"}}, {"nodeid": "tests/test_lobby.py::TestGameRoom::test_room_privacy", "lineno": 89, "outcome": "passed", "keywords": ["test_room_privacy", "TestGameRoom", "test_lobby.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 8.839741349220276e-05, "outcome": "passed"}, "call": {"duration": 0.00011197105050086975, "outcome": "passed"}, "teardown": {"duration": 8.790288120508194e-05, "outcome": "passed"}}, {"nodeid": "tests/test_lobby.py::TestGameRoom::test_start_end_game", "lineno": 106, "outcome": "passed", "keywords": ["test_start_end_game", "TestGameRoom", "test_lobby.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 8.380785584449768e-05, "outcome": "passed"}, "call": {"duration": 0.0001567518338561058, "outcome": "passed"}, "teardown": {"duration": 8.25338065624237e-05, "outcome": "passed"}}, {"nodeid": "tests/test_lobby.py::TestQueueManager::test_add_remove_players", "lineno": 129, "outcome": "passed", "keywords": ["test_add_remove_players", "TestQueueManager", "test_lobby.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 9.078346192836761e-05, "outcome": "passed"}, "call": {"duration": 0.0001159990206360817, "outcome": "passed"}, "teardown": {"duration": 7.431022822856903e-05, "outcome": "passed"}}, {"nodeid": "tests/test_lobby.py::TestQueueManager::test_matchmaking_basic", "lineno": 147, "outcome": "failed", "keywords": ["test_matchmaking_basic", "TestQueueManager", "test_lobby.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 8.566677570343018e-05, "outcome": "passed"}, "call": {"duration": 0.00019649043679237366, "outcome": "failed", "crash": {"path": "/home/justinchiu_cohere_com/librarybench/projects/terminal_game_engine/terminal_game_engine_multiplayer/tests/test_lobby.py", "lineno": 160, "message": "assert None is not None"}, "traceback": [{"path": "tests/test_lobby.py", "lineno": 160, "message": "in test_matchmaking_basic"}], "longrepr": "tests/test_lobby.py:160: in test_matchmaking_basic\n assert match is not None\nE assert None is not None"}, "teardown": {"duration": 0.0001173652708530426, "outcome": "passed"}}, {"nodeid": "tests/test_lobby.py::TestQueueManager::test_matchmaking_skill_tolerance", "lineno": 166, "outcome": "passed", "keywords": ["test_matchmaking_skill_tolerance", "TestQueueManager", "test_lobby.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 0.00010334420949220657, "outcome": "passed"}, "call": {"duration": 0.00017394311726093292, "outcome": "passed"}, "teardown": {"duration": 7.900502532720566e-05, "outcome": "passed"}}, {"nodeid": "tests/test_lobby.py::TestQueueManager::test_balanced_teams", "lineno": 181, "outcome": "failed", "keywords": ["test_balanced_teams", "TestQueueManager", "test_lobby.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 8.851941674947739e-05, "outcome": "passed"}, "call": {"duration": 0.00013823527842760086, "outcome": "failed", "crash": {"path": "/home/justinchiu_cohere_com/librarybench/projects/terminal_game_engine/terminal_game_engine_multiplayer/pytermgame/lobby/queue_manager.py", "lineno": 137, "message": "AttributeError: 'NoneType' object has no attribute 'players'"}, "traceback": [{"path": "tests/test_lobby.py", "lineno": 193, "message": "in test_balanced_teams"}, {"path": "pytermgame/lobby/queue_manager.py", "lineno": 137, "message": "in create_balanced_teams"}], "longrepr": "tests/test_lobby.py:193: in test_balanced_teams\n team1, team2 = queue.create_balanced_teams(match)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\npytermgame/lobby/queue_manager.py:137: in create_balanced_teams\n players = sorted(match_group.players, key=lambda p: p.skill_rating, reverse=True)\n ^^^^^^^^^^^^^^^^^^^\nE AttributeError: 'NoneType' object has no attribute 'players'"}, "teardown": {"duration": 0.00011649448424577713, "outcome": "passed"}}, {"nodeid": "tests/test_lobby.py::TestQueueManager::test_queue_statistics", "lineno": 208, "outcome": "passed", "keywords": ["test_queue_statistics", "TestQueueManager", "test_lobby.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 0.00010133069008588791, "outcome": "passed"}, "call": {"duration": 0.00012287776917219162, "outcome": "passed"}, "teardown": {"duration": 8.284114301204681e-05, "outcome": "passed"}}, {"nodeid": "tests/test_lobby.py::TestQueueManager::test_player_position", "lineno": 225, "outcome": "passed", "keywords": ["test_player_position", "TestQueueManager", "test_lobby.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 8.84542241692543e-05, "outcome": "passed"}, "call": {"duration": 0.00010664761066436768, "outcome": "passed"}, "teardown": {"duration": 9.64263454079628e-05, "outcome": "passed"}}, {"nodeid": "tests/test_lobby.py::TestLobbySystem::test_lobby_initialization", "lineno": 240, "outcome": "passed", "keywords": ["test_lobby_initialization", "asyncio", "pytestmark", "TestLobbySystem", "test_lobby.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 0.00022061076015233994, "outcome": "passed"}, "call": {"duration": 0.00017701368778944016, "outcome": "passed"}, "teardown": {"duration": 0.00015672389417886734, "outcome": "passed"}}, {"nodeid": "tests/test_lobby.py::TestLobbySystem::test_create_room", "lineno": 249, "outcome": "passed", "keywords": ["test_create_room", "TestLobbySystem", "test_lobby.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 9.292643517255783e-05, "outcome": "passed"}, "call": {"duration": 0.0001243390142917633, "outcome": "passed"}, "teardown": {"duration": 8.322391659021378e-05, "outcome": "passed"}}, {"nodeid": "tests/test_lobby.py::TestLobbySystem::test_join_leave_room", "lineno": 265, "outcome": "passed", "keywords": ["test_join_leave_room", "TestLobbySystem", "test_lobby.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 8.652545511722565e-05, "outcome": "passed"}, "call": {"duration": 0.00012337882071733475, "outcome": "passed"}, "teardown": {"duration": 7.144641131162643e-05, "outcome": "passed"}}, {"nodeid": "tests/test_lobby.py::TestLobbySystem::test_ready_status_management", "lineno": 289, "outcome": "passed", "keywords": ["test_ready_status_management", "TestLobbySystem", "test_lobby.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 8.392240852117538e-05, "outcome": "passed"}, "call": {"duration": 0.00012324191629886627, "outcome": "passed"}, "teardown": {"duration": 7.698778063058853e-05, "outcome": "passed"}}, {"nodeid": "tests/test_lobby.py::TestLobbySystem::test_matchmaking_integration", "lineno": 305, "outcome": "passed", "keywords": ["test_matchmaking_integration", "TestLobbySystem", "test_lobby.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 8.707959204912186e-05, "outcome": "passed"}, "call": {"duration": 0.0001322571188211441, "outcome": "passed"}, "teardown": {"duration": 7.276702672243118e-05, "outcome": "passed"}}, {"nodeid": "tests/test_lobby.py::TestLobbySystem::test_room_list", "lineno": 326, "outcome": "failed", "keywords": ["test_room_list", "TestLobbySystem", "test_lobby.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 8.480343967676163e-05, "outcome": "passed"}, "call": {"duration": 0.00015754904597997665, "outcome": "failed", "crash": {"path": "/home/justinchiu_cohere_com/librarybench/projects/terminal_game_engine/terminal_game_engine_multiplayer/tests/test_lobby.py", "lineno": 337, "message": "pydantic_core._pydantic_core.ValidationError: 1 validation error for RoomSettings\nmax_players\n Input should be greater than or equal to 2 [type=greater_than_equal, input_value=1, input_type=int]\n For further information visit https://errors.pydantic.dev/2.11/v/greater_than_equal"}, "traceback": [{"path": "tests/test_lobby.py", "lineno": 337, "message": "in test_room_list"}], "longrepr": "tests/test_lobby.py:337: in test_room_list\n full_room = lobby.create_room(\"host3\", \"Full Room\", RoomSettings(max_players=1))\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^\nE pydantic_core._pydantic_core.ValidationError: 1 validation error for RoomSettings\nE max_players\nE Input should be greater than or equal to 2 [type=greater_than_equal, input_value=1, input_type=int]\nE For further information visit https://errors.pydantic.dev/2.11/v/greater_than_equal"}, "teardown": {"duration": 0.00011469423770904541, "outcome": "passed"}}, {"nodeid": "tests/test_lobby.py::TestLobbySystem::test_start_stop", "lineno": 352, "outcome": "passed", "keywords": ["test_start_stop", "asyncio", "pytestmark", "TestLobbySystem", "test_lobby.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 0.00023434683680534363, "outcome": "passed"}, "call": {"duration": 0.0001857355237007141, "outcome": "passed"}, "teardown": {"duration": 0.000164923258125782, "outcome": "passed"}}, {"nodeid": "tests/test_lobby.py::TestLobbySystem::test_callbacks", "lineno": 363, "outcome": "passed", "keywords": ["test_callbacks", "TestLobbySystem", "test_lobby.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 9.629502892494202e-05, "outcome": "passed"}, "call": {"duration": 0.00013869721442461014, "outcome": "passed"}, "teardown": {"duration": 7.821060717105865e-05, "outcome": "passed"}}, {"nodeid": "tests/test_lobby.py::test_lobby_matchmaking_integration", "lineno": 384, "outcome": "failed", "keywords": ["test_lobby_matchmaking_integration", "asyncio", "pytestmark", "test_lobby.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 0.0002111624926328659, "outcome": "passed"}, "call": {"duration": 2.5013299081474543, "outcome": "failed", "crash": {"path": "/home/justinchiu_cohere_com/librarybench/projects/terminal_game_engine/terminal_game_engine_multiplayer/tests/test_lobby.py", "lineno": 406, "message": "assert 0 == 1\n + where 0 = len([])"}, "traceback": [{"path": "tests/test_lobby.py", "lineno": 406, "message": "in test_lobby_matchmaking_integration"}], "longrepr": "tests/test_lobby.py:406: in test_lobby_matchmaking_integration\n assert len(match_results) == 1\nE assert 0 == 1\nE + where 0 = len([])"}, "teardown": {"duration": 0.0002908734604716301, "outcome": "passed"}}, {"nodeid": "tests/test_matchmaking.py::TestPlayerProfile::test_profile_creation", "lineno": 9, "outcome": "passed", "keywords": ["test_profile_creation", "TestPlayerProfile", "test_matchmaking.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 0.0001286473125219345, "outcome": "passed"}, "call": {"duration": 0.00013484712690114975, "outcome": "passed"}, "teardown": {"duration": 8.040759712457657e-05, "outcome": "passed"}}, {"nodeid": "tests/test_matchmaking.py::TestPlayerProfile::test_update_rating", "lineno": 24, "outcome": "passed", "keywords": ["test_update_rating", "TestPlayerProfile", "test_matchmaking.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 9.176600724458694e-05, "outcome": "passed"}, "call": {"duration": 0.00012975279241800308, "outcome": "passed"}, "teardown": {"duration": 7.484480738639832e-05, "outcome": "passed"}}, {"nodeid": "tests/test_matchmaking.py::TestPlayerProfile::test_update_stats", "lineno": 43, "outcome": "passed", "keywords": ["test_update_stats", "TestPlayerProfile", "test_matchmaking.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 8.867122232913971e-05, "outcome": "passed"}, "call": {"duration": 0.00012150593101978302, "outcome": "passed"}, "teardown": {"duration": 7.400661706924438e-05, "outcome": "passed"}}, {"nodeid": "tests/test_matchmaking.py::TestMatchResult::test_match_result_creation", "lineno": 67, "outcome": "passed", "keywords": ["test_match_result_creation", "TestMatchResult", "test_matchmaking.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 8.405372500419617e-05, "outcome": "passed"}, "call": {"duration": 0.00010463129729032516, "outcome": "passed"}, "teardown": {"duration": 8.256733417510986e-05, "outcome": "passed"}}, {"nodeid": "tests/test_matchmaking.py::TestMatchmakingEngine::test_engine_creation", "lineno": 89, "outcome": "passed", "keywords": ["test_engine_creation", "TestMatchmakingEngine", "test_matchmaking.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 8.899252861738205e-05, "outcome": "passed"}, "call": {"duration": 8.829496800899506e-05, "outcome": "passed"}, "teardown": {"duration": 7.64681026339531e-05, "outcome": "passed"}}, {"nodeid": "tests/test_matchmaking.py::TestMatchmakingEngine::test_register_player", "lineno": 98, "outcome": "passed", "keywords": ["test_register_player", "TestMatchmakingEngine", "test_matchmaking.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 8.461344987154007e-05, "outcome": "passed"}, "call": {"duration": 9.531155228614807e-05, "outcome": "passed"}, "teardown": {"duration": 7.031857967376709e-05, "outcome": "passed"}}, {"nodeid": "tests/test_matchmaking.py::TestMatchmakingEngine::test_update_player_profile", "lineno": 112, "outcome": "passed", "keywords": ["test_update_player_profile", "TestMatchmakingEngine", "test_matchmaking.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 8.142180740833282e-05, "outcome": "passed"}, "call": {"duration": 0.00011421460658311844, "outcome": "passed"}, "teardown": {"duration": 6.91516324877739e-05, "outcome": "passed"}}, {"nodeid": "tests/test_matchmaking.py::TestMatchmakingEngine::test_create_match", "lineno": 133, "outcome": "passed", "keywords": ["test_create_match", "TestMatchmakingEngine", "test_matchmaking.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 8.100457489490509e-05, "outcome": "passed"}, "call": {"duration": 0.00016126874834299088, "outcome": "passed"}, "teardown": {"duration": 7.961411029100418e-05, "outcome": "passed"}}, {"nodeid": "tests/test_matchmaking.py::TestMatchmakingEngine::test_balanced_teams", "lineno": 156, "outcome": "passed", "keywords": ["test_balanced_teams", "TestMatchmakingEngine", "test_matchmaking.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 8.849706500768661e-05, "outcome": "passed"}, "call": {"duration": 0.00012936629354953766, "outcome": "passed"}, "teardown": {"duration": 7.136352360248566e-05, "outcome": "passed"}}, {"nodeid": "tests/test_matchmaking.py::TestMatchmakingEngine::test_match_quality_calculation", "lineno": 184, "outcome": "failed", "keywords": ["test_match_quality_calculation", "TestMatchmakingEngine", "test_matchmaking.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 9.178277105093002e-05, "outcome": "passed"}, "call": {"duration": 0.000267750583589077, "outcome": "failed", "crash": {"path": "/home/justinchiu_cohere_com/librarybench/projects/terminal_game_engine/terminal_game_engine_multiplayer/tests/test_matchmaking.py", "lineno": 207, "message": "AssertionError: assert 0.8322949016875157 < 0.5\n + where 0.8322949016875157 = MatchResult(match_id='match_1752370485886', teams=[['different3', 'different0'], ['different2', 'different1']], average_skill=1250.0, skill_variance=559.0169943749474, match_quality=0.8322949016875157, mode=<MatchmakingMode.SKILL_BASED: 'skill_based'>, created_at=1752370485.8867483).match_quality"}, "traceback": [{"path": "tests/test_matchmaking.py", "lineno": 207, "message": "in test_match_quality_calculation"}], "longrepr": "tests/test_matchmaking.py:207: in test_match_quality_calculation\n assert match.match_quality < 0.5 # Low quality due to skill variance\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nE AssertionError: assert 0.8322949016875157 < 0.5\nE + where 0.8322949016875157 = MatchResult(match_id='match_1752370485886', teams=[['different3', 'different0'], ['different2', 'different1']], average_skill=1250.0, skill_variance=559.0169943749474, match_quality=0.8322949016875157, mode=<MatchmakingMode.SKILL_BASED: 'skill_based'>, created_at=1752370485.8867483).match_quality"}, "teardown": {"duration": 0.0001168353483080864, "outcome": "passed"}}, {"nodeid": "tests/test_matchmaking.py::TestMatchmakingEngine::test_update_ratings", "lineno": 208, "outcome": "passed", "keywords": ["test_update_ratings", "TestMatchmakingEngine", "test_matchmaking.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 0.00010752212256193161, "outcome": "passed"}, "call": {"duration": 0.0001640142872929573, "outcome": "passed"}, "teardown": {"duration": 8.248444646596909e-05, "outcome": "passed"}}, {"nodeid": "tests/test_matchmaking.py::TestMatchmakingEngine::test_k_factor_adjustment", "lineno": 234, "outcome": "passed", "keywords": ["test_k_factor_adjustment", "TestMatchmakingEngine", "test_matchmaking.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 9.287800639867783e-05, "outcome": "passed"}, "call": {"duration": 0.00010259822010993958, "outcome": "passed"}, "teardown": {"duration": 7.474422454833984e-05, "outcome": "passed"}}, {"nodeid": "tests/test_matchmaking.py::TestMatchmakingEngine::test_find_suitable_opponents", "lineno": 256, "outcome": "passed", "keywords": ["test_find_suitable_opponents", "TestMatchmakingEngine", "test_matchmaking.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 8.437596261501312e-05, "outcome": "passed"}, "call": {"duration": 0.00015072710812091827, "outcome": "passed"}, "teardown": {"duration": 7.311813533306122e-05, "outcome": "passed"}}, {"nodeid": "tests/test_matchmaking.py::TestMatchmakingEngine::test_match_scoring", "lineno": 283, "outcome": "passed", "keywords": ["test_match_scoring", "TestMatchmakingEngine", "test_matchmaking.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 8.390843868255615e-05, "outcome": "passed"}, "call": {"duration": 0.00011095590889453888, "outcome": "passed"}, "teardown": {"duration": 6.948783993721008e-05, "outcome": "passed"}}, {"nodeid": "tests/test_matchmaking.py::TestMatchmakingEngine::test_leaderboard", "lineno": 307, "outcome": "passed", "keywords": ["test_leaderboard", "TestMatchmakingEngine", "test_matchmaking.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 8.487794548273087e-05, "outcome": "passed"}, "call": {"duration": 0.00011273752897977829, "outcome": "passed"}, "teardown": {"duration": 7.426738739013672e-05, "outcome": "passed"}}, {"nodeid": "tests/test_matchmaking.py::test_matchmaking_scenarios", "lineno": 325, "outcome": "failed", "keywords": ["test_matchmaking_scenarios", "test_matchmaking.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 9.09874215722084e-05, "outcome": "passed"}, "call": {"duration": 0.00020040199160575867, "outcome": "failed", "crash": {"path": "/home/justinchiu_cohere_com/librarybench/projects/terminal_game_engine/terminal_game_engine_multiplayer/tests/test_matchmaking.py", "lineno": 341, "message": "assert 5 == 4"}, "traceback": [{"path": "tests/test_matchmaking.py", "lineno": 341, "message": "in test_matchmaking_scenarios"}], "longrepr": "tests/test_matchmaking.py:341: in test_matchmaking_scenarios\n assert total_players == 4\nE assert 5 == 4"}, "teardown": {"duration": 0.00011445209383964539, "outcome": "passed"}}, {"nodeid": "tests/test_network.py::TestPacket::test_packet_creation", "lineno": 17, "outcome": "passed", "keywords": ["test_packet_creation", "TestPacket", "test_network.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 0.00010283384472131729, "outcome": "passed"}, "call": {"duration": 0.00012045260518789291, "outcome": "passed"}, "teardown": {"duration": 8.285138756036758e-05, "outcome": "passed"}}, {"nodeid": "tests/test_network.py::TestPacket::test_packet_serialization", "lineno": 31, "outcome": "failed", "keywords": ["test_packet_serialization", "TestPacket", "test_network.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 9.281747043132782e-05, "outcome": "passed"}, "call": {"duration": 0.00015948526561260223, "outcome": "failed", "crash": {"path": "/home/justinchiu_cohere_com/.local/share/uv/python/cpython-3.12.9-linux-x86_64-gnu/lib/python3.12/json/encoder.py", "lineno": 180, "message": "TypeError: Object of type PacketType is not JSON serializable"}, "traceback": [{"path": "tests/test_network.py", "lineno": 42, "message": "in test_packet_serialization"}, {"path": "pytermgame/network/packet.py", "lineno": 41, "message": "in serialize"}, {"path": "../../../../.local/share/uv/python/cpython-3.12.9-linux-x86_64-gnu/lib/python3.12/json/__init__.py", "lineno": 231, "message": "in dumps"}, {"path": "../../../../.local/share/uv/python/cpython-3.12.9-linux-x86_64-gnu/lib/python3.12/json/encoder.py", "lineno": 200, "message": "in encode"}, {"path": "../../../../.local/share/uv/python/cpython-3.12.9-linux-x86_64-gnu/lib/python3.12/json/encoder.py", "lineno": 258, "message": "in iterencode"}, {"path": "../../../../.local/share/uv/python/cpython-3.12.9-linux-x86_64-gnu/lib/python3.12/json/encoder.py", "lineno": 180, "message": "in default"}], "longrepr": "tests/test_network.py:42: in test_packet_serialization\n serialized = original.serialize()\n ^^^^^^^^^^^^^^^^^^^^\npytermgame/network/packet.py:41: in serialize\n return json.dumps(self.model_dump()).encode('utf-8')\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n../../../../.local/share/uv/python/cpython-3.12.9-linux-x86_64-gnu/lib/python3.12/json/__init__.py:231: in dumps\n return _default_encoder.encode(obj)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n../../../../.local/share/uv/python/cpython-3.12.9-linux-x86_64-gnu/lib/python3.12/json/encoder.py:200: in encode\n chunks = self.iterencode(o, _one_shot=True)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n../../../../.local/share/uv/python/cpython-3.12.9-linux-x86_64-gnu/lib/python3.12/json/encoder.py:258: in iterencode\n return _iterencode(o, 0)\n ^^^^^^^^^^^^^^^^^\n../../../../.local/share/uv/python/cpython-3.12.9-linux-x86_64-gnu/lib/python3.12/json/encoder.py:180: in default\n raise TypeError(f'Object of type {o.__class__.__name__} '\nE TypeError: Object of type PacketType is not JSON serializable"}, "teardown": {"duration": 0.00011736899614334106, "outcome": "passed"}}, {"nodeid": "tests/test_network.py::TestPacket::test_create_ack", "lineno": 49, "outcome": "passed", "keywords": ["test_create_ack", "TestPacket", "test_network.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 0.00010180752724409103, "outcome": "passed"}, "call": {"duration": 0.00011494290083646774, "outcome": "passed"}, "teardown": {"duration": 7.754284888505936e-05, "outcome": "passed"}}, {"nodeid": "tests/test_network.py::TestNetworkManager::test_manager_initialization", "lineno": 69, "outcome": "passed", "keywords": ["test_manager_initialization", "asyncio", "pytestmark", "TestNetworkManager", "test_network.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 0.00025025010108947754, "outcome": "passed"}, "call": {"duration": 0.0001946995034813881, "outcome": "passed"}, "teardown": {"duration": 0.0001612463966012001, "outcome": "passed"}}, {"nodeid": "tests/test_network.py::TestNetworkManager::test_start_stop", "lineno": 78, "outcome": "passed", "keywords": ["test_start_stop", "asyncio", "pytestmark", "TestNetworkManager", "test_network.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 0.00021856743842363358, "outcome": "passed"}, "call": {"duration": 0.00017237383872270584, "outcome": "passed"}, "teardown": {"duration": 0.00015168916434049606, "outcome": "passed"}}, {"nodeid": "tests/test_network.py::TestNetworkManager::test_packet_handler_registration", "lineno": 89, "outcome": "passed", "keywords": ["test_packet_handler_registration", "asyncio", "pytestmark", "TestNetworkManager", "test_network.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 0.00021480955183506012, "outcome": "passed"}, "call": {"duration": 0.00021397974342107773, "outcome": "passed"}, "teardown": {"duration": 0.00015300139784812927, "outcome": "passed"}}, {"nodeid": "tests/test_network.py::TestNetworkManager::test_send_packet", "lineno": 101, "outcome": "failed", "keywords": ["test_send_packet", "asyncio", "pytestmark", "TestNetworkManager", "test_network.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 0.00019940920174121857, "outcome": "passed"}, "call": {"duration": 0.0005739685148000717, "outcome": "failed", "crash": {"path": "/home/justinchiu_cohere_com/.local/share/uv/python/cpython-3.12.9-linux-x86_64-gnu/lib/python3.12/json/encoder.py", "lineno": 180, "message": "TypeError: Object of type PacketType is not JSON serializable"}, "traceback": [{"path": "tests/test_network.py", "lineno": 117, "message": "in test_send_packet"}, {"path": "pytermgame/network/manager.py", "lineno": 83, "message": "in send_packet"}, {"path": "pytermgame/network/packet.py", "lineno": 41, "message": "in serialize"}, {"path": "../../../../.local/share/uv/python/cpython-3.12.9-linux-x86_64-gnu/lib/python3.12/json/__init__.py", "lineno": 231, "message": "in dumps"}, {"path": "../../../../.local/share/uv/python/cpython-3.12.9-linux-x86_64-gnu/lib/python3.12/json/encoder.py", "lineno": 200, "message": "in encode"}, {"path": "../../../../.local/share/uv/python/cpython-3.12.9-linux-x86_64-gnu/lib/python3.12/json/encoder.py", "lineno": 258, "message": "in iterencode"}, {"path": "../../../../.local/share/uv/python/cpython-3.12.9-linux-x86_64-gnu/lib/python3.12/json/encoder.py", "lineno": 180, "message": "in default"}], "longrepr": "tests/test_network.py:117: in test_send_packet\n success = await manager.send_packet(packet, \"client1\")\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\npytermgame/network/manager.py:83: in send_packet\n success = await protocol.send(packet.serialize())\n ^^^^^^^^^^^^^^^^^^\npytermgame/network/packet.py:41: in serialize\n return json.dumps(self.model_dump()).encode('utf-8')\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n../../../../.local/share/uv/python/cpython-3.12.9-linux-x86_64-gnu/lib/python3.12/json/__init__.py:231: in dumps\n return _default_encoder.encode(obj)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n../../../../.local/share/uv/python/cpython-3.12.9-linux-x86_64-gnu/lib/python3.12/json/encoder.py:200: in encode\n chunks = self.iterencode(o, _one_shot=True)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n../../../../.local/share/uv/python/cpython-3.12.9-linux-x86_64-gnu/lib/python3.12/json/encoder.py:258: in iterencode\n return _iterencode(o, 0)\n ^^^^^^^^^^^^^^^^^\n../../../../.local/share/uv/python/cpython-3.12.9-linux-x86_64-gnu/lib/python3.12/json/encoder.py:180: in default\n raise TypeError(f'Object of type {o.__class__.__name__} '\nE TypeError: Object of type PacketType is not JSON serializable"}, "teardown": {"duration": 0.0002063792198896408, "outcome": "passed"}}, {"nodeid": "tests/test_network.py::TestNetworkManager::test_broadcast_packet", "lineno": 121, "outcome": "failed", "keywords": ["test_broadcast_packet", "asyncio", "pytestmark", "TestNetworkManager", "test_network.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 0.0002315044403076172, "outcome": "passed"}, "call": {"duration": 0.0009428774937987328, "outcome": "failed", "crash": {"path": "/home/justinchiu_cohere_com/.local/share/uv/python/cpython-3.12.9-linux-x86_64-gnu/lib/python3.12/json/encoder.py", "lineno": 180, "message": "TypeError: Object of type PacketType is not JSON serializable"}, "traceback": [{"path": "tests/test_network.py", "lineno": 139, "message": "in test_broadcast_packet"}, {"path": "pytermgame/network/manager.py", "lineno": 97, "message": "in broadcast_packet"}, {"path": "pytermgame/network/manager.py", "lineno": 83, "message": "in send_packet"}, {"path": "pytermgame/network/packet.py", "lineno": 41, "message": "in serialize"}, {"path": "../../../../.local/share/uv/python/cpython-3.12.9-linux-x86_64-gnu/lib/python3.12/json/__init__.py", "lineno": 231, "message": "in dumps"}, {"path": "../../../../.local/share/uv/python/cpython-3.12.9-linux-x86_64-gnu/lib/python3.12/json/encoder.py", "lineno": 200, "message": "in encode"}, {"path": "../../../../.local/share/uv/python/cpython-3.12.9-linux-x86_64-gnu/lib/python3.12/json/encoder.py", "lineno": 258, "message": "in iterencode"}, {"path": "../../../../.local/share/uv/python/cpython-3.12.9-linux-x86_64-gnu/lib/python3.12/json/encoder.py", "lineno": 180, "message": "in default"}], "longrepr": "tests/test_network.py:139: in test_broadcast_packet\n results = await manager.broadcast_packet(packet, exclude=[\"client1\"])\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\npytermgame/network/manager.py:97: in broadcast_packet\n results[client_id] = await self.send_packet(packet, client_id)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\npytermgame/network/manager.py:83: in send_packet\n success = await protocol.send(packet.serialize())\n ^^^^^^^^^^^^^^^^^^\npytermgame/network/packet.py:41: in serialize\n return json.dumps(self.model_dump()).encode('utf-8')\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n../../../../.local/share/uv/python/cpython-3.12.9-linux-x86_64-gnu/lib/python3.12/json/__init__.py:231: in dumps\n return _default_encoder.encode(obj)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n../../../../.local/share/uv/python/cpython-3.12.9-linux-x86_64-gnu/lib/python3.12/json/encoder.py:200: in encode\n chunks = self.iterencode(o, _one_shot=True)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n../../../../.local/share/uv/python/cpython-3.12.9-linux-x86_64-gnu/lib/python3.12/json/encoder.py:258: in iterencode\n return _iterencode(o, 0)\n ^^^^^^^^^^^^^^^^^\n../../../../.local/share/uv/python/cpython-3.12.9-linux-x86_64-gnu/lib/python3.12/json/encoder.py:180: in default\n raise TypeError(f'Object of type {o.__class__.__name__} '\nE TypeError: Object of type PacketType is not JSON serializable"}, "teardown": {"duration": 0.00020277593284845352, "outcome": "passed"}}, {"nodeid": "tests/test_network.py::TestNetworkClient::test_client_initialization", "lineno": 148, "outcome": "passed", "keywords": ["test_client_initialization", "asyncio", "pytestmark", "TestNetworkClient", "test_network.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 0.000238930806517601, "outcome": "passed"}, "call": {"duration": 0.00017860718071460724, "outcome": "passed"}, "teardown": {"duration": 0.0001550726592540741, "outcome": "passed"}}, {"nodeid": "tests/test_network.py::TestNetworkClient::test_send_input", "lineno": 157, "outcome": "passed", "keywords": ["test_send_input", "asyncio", "pytestmark", "TestNetworkClient", "test_network.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 0.0002050604671239853, "outcome": "passed"}, "call": {"duration": 0.0004158271476626396, "outcome": "passed"}, "teardown": {"duration": 0.00016933400183916092, "outcome": "passed"}}, {"nodeid": "tests/test_network.py::TestNetworkClient::test_send_chat_message", "lineno": 179, "outcome": "passed", "keywords": ["test_send_chat_message", "asyncio", "pytestmark", "TestNetworkClient", "test_network.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 0.00021653901785612106, "outcome": "passed"}, "call": {"duration": 0.0003943871706724167, "outcome": "passed"}, "teardown": {"duration": 0.0001594536006450653, "outcome": "passed"}}, {"nodeid": "tests/test_network.py::TestNetworkServer::test_server_initialization", "lineno": 203, "outcome": "passed", "keywords": ["test_server_initialization", "asyncio", "pytestmark", "TestNetworkServer", "test_network.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 0.00020676013082265854, "outcome": "passed"}, "call": {"duration": 0.0001614391803741455, "outcome": "passed"}, "teardown": {"duration": 0.00016334932297468185, "outcome": "passed"}}, {"nodeid": "tests/test_network.py::TestNetworkServer::test_packet_handling", "lineno": 213, "outcome": "failed", "keywords": ["test_packet_handling", "asyncio", "pytestmark", "TestNetworkServer", "test_network.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 0.00020926538854837418, "outcome": "passed"}, "call": {"duration": 0.00024122372269630432, "outcome": "failed", "crash": {"path": "/home/justinchiu_cohere_com/.local/share/uv/python/cpython-3.12.9-linux-x86_64-gnu/lib/python3.12/json/encoder.py", "lineno": 180, "message": "TypeError: Object of type PacketType is not JSON serializable"}, "traceback": [{"path": "tests/test_network.py", "lineno": 229, "message": "in test_packet_handling"}, {"path": "pytermgame/network/packet.py", "lineno": 41, "message": "in serialize"}, {"path": "../../../../.local/share/uv/python/cpython-3.12.9-linux-x86_64-gnu/lib/python3.12/json/__init__.py", "lineno": 231, "message": "in dumps"}, {"path": "../../../../.local/share/uv/python/cpython-3.12.9-linux-x86_64-gnu/lib/python3.12/json/encoder.py", "lineno": 200, "message": "in encode"}, {"path": "../../../../.local/share/uv/python/cpython-3.12.9-linux-x86_64-gnu/lib/python3.12/json/encoder.py", "lineno": 258, "message": "in iterencode"}, {"path": "../../../../.local/share/uv/python/cpython-3.12.9-linux-x86_64-gnu/lib/python3.12/json/encoder.py", "lineno": 180, "message": "in default"}], "longrepr": "tests/test_network.py:229: in test_packet_handling\n await server._handle_packet_data(packet.serialize(), \"client1\")\n ^^^^^^^^^^^^^^^^^^\npytermgame/network/packet.py:41: in serialize\n return json.dumps(self.model_dump()).encode('utf-8')\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n../../../../.local/share/uv/python/cpython-3.12.9-linux-x86_64-gnu/lib/python3.12/json/__init__.py:231: in dumps\n return _default_encoder.encode(obj)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n../../../../.local/share/uv/python/cpython-3.12.9-linux-x86_64-gnu/lib/python3.12/json/encoder.py:200: in encode\n chunks = self.iterencode(o, _one_shot=True)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n../../../../.local/share/uv/python/cpython-3.12.9-linux-x86_64-gnu/lib/python3.12/json/encoder.py:258: in iterencode\n return _iterencode(o, 0)\n ^^^^^^^^^^^^^^^^^\n../../../../.local/share/uv/python/cpython-3.12.9-linux-x86_64-gnu/lib/python3.12/json/encoder.py:180: in default\n raise TypeError(f'Object of type {o.__class__.__name__} '\nE TypeError: Object of type PacketType is not JSON serializable"}, "teardown": {"duration": 0.0002037007361650467, "outcome": "passed"}}, {"nodeid": "tests/test_network.py::TestNetworkServer::test_client_management", "lineno": 235, "outcome": "passed", "keywords": ["test_client_management", "asyncio", "pytestmark", "TestNetworkServer", "test_network.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 0.00022494792938232422, "outcome": "passed"}, "call": {"duration": 0.000608472153544426, "outcome": "passed"}, "teardown": {"duration": 0.0001740735024213791, "outcome": "passed"}}, {"nodeid": "tests/test_network.py::TestProtocols::test_tcp_protocol", "lineno": 263, "outcome": "passed", "keywords": ["test_tcp_protocol", "asyncio", "pytestmark", "TestProtocols", "test_network.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 0.00022927764803171158, "outcome": "passed"}, "call": {"duration": 0.00015704426914453506, "outcome": "passed"}, "teardown": {"duration": 0.00015261210501194, "outcome": "passed"}}, {"nodeid": "tests/test_network.py::TestProtocols::test_udp_protocol", "lineno": 271, "outcome": "passed", "keywords": ["test_udp_protocol", "asyncio", "pytestmark", "TestProtocols", "test_network.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 0.00019939430058002472, "outcome": "passed"}, "call": {"duration": 0.0001530144363641739, "outcome": "passed"}, "teardown": {"duration": 0.00014459621161222458, "outcome": "passed"}}, {"nodeid": "tests/test_network.py::test_integration_client_server", "lineno": 280, "outcome": "failed", "keywords": ["test_integration_client_server", "asyncio", "pytestmark", "test_network.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 0.00019250158220529556, "outcome": "passed"}, "call": {"duration": 0.0002259332686662674, "outcome": "failed", "crash": {"path": "/home/justinchiu_cohere_com/.local/share/uv/python/cpython-3.12.9-linux-x86_64-gnu/lib/python3.12/json/encoder.py", "lineno": 180, "message": "TypeError: Object of type PacketType is not JSON serializable"}, "traceback": [{"path": "tests/test_network.py", "lineno": 311, "message": "in test_integration_client_server"}, {"path": "pytermgame/network/client.py", "lineno": 93, "message": "in send_input"}, {"path": "tests/test_network.py", "lineno": 305, "message": "in mock_send"}, {"path": "pytermgame/network/packet.py", "lineno": 41, "message": "in serialize"}, {"path": "../../../../.local/share/uv/python/cpython-3.12.9-linux-x86_64-gnu/lib/python3.12/json/__init__.py", "lineno": 231, "message": "in dumps"}, {"path": "../../../../.local/share/uv/python/cpython-3.12.9-linux-x86_64-gnu/lib/python3.12/json/encoder.py", "lineno": 200, "message": "in encode"}, {"path": "../../../../.local/share/uv/python/cpython-3.12.9-linux-x86_64-gnu/lib/python3.12/json/encoder.py", "lineno": 258, "message": "in iterencode"}, {"path": "../../../../.local/share/uv/python/cpython-3.12.9-linux-x86_64-gnu/lib/python3.12/json/encoder.py", "lineno": 180, "message": "in default"}], "longrepr": "tests/test_network.py:311: in test_integration_client_server\n await client.send_input({\"move\": \"forward\"})\npytermgame/network/client.py:93: in send_input\n return await self.manager.send_packet(input_packet, self.server_id)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\ntests/test_network.py:305: in mock_send\n await server._handle_packet_data(packet.serialize(), \"player1\")\n ^^^^^^^^^^^^^^^^^^\npytermgame/network/packet.py:41: in serialize\n return json.dumps(self.model_dump()).encode('utf-8')\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n../../../../.local/share/uv/python/cpython-3.12.9-linux-x86_64-gnu/lib/python3.12/json/__init__.py:231: in dumps\n return _default_encoder.encode(obj)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n../../../../.local/share/uv/python/cpython-3.12.9-linux-x86_64-gnu/lib/python3.12/json/encoder.py:200: in encode\n chunks = self.iterencode(o, _one_shot=True)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n../../../../.local/share/uv/python/cpython-3.12.9-linux-x86_64-gnu/lib/python3.12/json/encoder.py:258: in iterencode\n return _iterencode(o, 0)\n ^^^^^^^^^^^^^^^^^\n../../../../.local/share/uv/python/cpython-3.12.9-linux-x86_64-gnu/lib/python3.12/json/encoder.py:180: in default\n raise TypeError(f'Object of type {o.__class__.__name__} '\nE TypeError: Object of type PacketType is not JSON serializable"}, "teardown": {"duration": 0.0002022935077548027, "outcome": "passed"}}, {"nodeid": "tests/test_spectator.py::TestSpectatorView::test_view_creation", "lineno": 16, "outcome": "passed", "keywords": ["test_view_creation", "TestSpectatorView", "test_spectator.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 0.00010711513459682465, "outcome": "passed"}, "call": {"duration": 0.00010821875184774399, "outcome": "passed"}, "teardown": {"duration": 7.737241685390472e-05, "outcome": "passed"}}, {"nodeid": "tests/test_spectator.py::TestSpectatorView::test_view_mode_switching", "lineno": 28, "outcome": "passed", "keywords": ["test_view_mode_switching", "TestSpectatorView", "test_spectator.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 9.015761315822601e-05, "outcome": "passed"}, "call": {"duration": 0.00011934991925954819, "outcome": "passed"}, "teardown": {"duration": 8.564535528421402e-05, "outcome": "passed"}}, {"nodeid": "tests/test_spectator.py::TestSpectatorView::test_camera_position", "lineno": 42, "outcome": "passed", "keywords": ["test_camera_position", "TestSpectatorView", "test_spectator.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 8.87792557477951e-05, "outcome": "passed"}, "call": {"duration": 0.0001048743724822998, "outcome": "passed"}, "teardown": {"duration": 7.73351639509201e-05, "outcome": "passed"}}, {"nodeid": "tests/test_spectator.py::TestSpectatorMode::test_spectator_mode_creation", "lineno": 55, "outcome": "passed", "keywords": ["test_spectator_mode_creation", "asyncio", "pytestmark", "TestSpectatorMode", "test_spectator.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 0.00021091382950544357, "outcome": "passed"}, "call": {"duration": 0.00017238594591617584, "outcome": "passed"}, "teardown": {"duration": 0.00015048030763864517, "outcome": "passed"}}, {"nodeid": "tests/test_spectator.py::TestSpectatorMode::test_add_remove_spectators", "lineno": 65, "outcome": "passed", "keywords": ["test_add_remove_spectators", "TestSpectatorMode", "test_spectator.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 9.451992809772491e-05, "outcome": "passed"}, "call": {"duration": 0.00010935589671134949, "outcome": "passed"}, "teardown": {"duration": 8.066091686487198e-05, "outcome": "passed"}}, {"nodeid": "tests/test_spectator.py::TestSpectatorMode::test_max_spectators", "lineno": 84, "outcome": "passed", "keywords": ["test_max_spectators", "TestSpectatorMode", "test_spectator.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 8.618086576461792e-05, "outcome": "passed"}, "call": {"duration": 0.00010058563202619553, "outcome": "passed"}, "teardown": {"duration": 7.129739969968796e-05, "outcome": "passed"}}, {"nodeid": "tests/test_spectator.py::TestSpectatorMode::test_game_state_update", "lineno": 94, "outcome": "passed", "keywords": ["test_game_state_update", "TestSpectatorMode", "test_spectator.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 8.408725261688232e-05, "outcome": "passed"}, "call": {"duration": 0.00011029001325368881, "outcome": "passed"}, "teardown": {"duration": 7.201172411441803e-05, "outcome": "passed"}}, {"nodeid": "tests/test_spectator.py::TestSpectatorMode::test_delayed_state", "lineno": 118, "outcome": "passed", "keywords": ["test_delayed_state", "TestSpectatorMode", "test_spectator.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 8.267629891633987e-05, "outcome": "passed"}, "call": {"duration": 0.00010649766772985458, "outcome": "passed"}, "teardown": {"duration": 6.861984729766846e-05, "outcome": "passed"}}, {"nodeid": "tests/test_spectator.py::TestSpectatorMode::test_view_mode_management", "lineno": 150, "outcome": "passed", "keywords": ["test_view_mode_management", "TestSpectatorMode", "test_spectator.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 7.872283458709717e-05, "outcome": "passed"}, "call": {"duration": 9.620748460292816e-05, "outcome": "passed"}, "teardown": {"duration": 7.515866309404373e-05, "outcome": "passed"}}, {"nodeid": "tests/test_spectator.py::TestSpectatorMode::test_camera_updates", "lineno": 165, "outcome": "passed", "keywords": ["test_camera_updates", "TestSpectatorMode", "test_spectator.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 8.585676550865173e-05, "outcome": "passed"}, "call": {"duration": 0.00012830831110477448, "outcome": "passed"}, "teardown": {"duration": 7.304642349481583e-05, "outcome": "passed"}}, {"nodeid": "tests/test_spectator.py::TestSpectatorMode::test_spectator_list", "lineno": 181, "outcome": "passed", "keywords": ["test_spectator_list", "TestSpectatorMode", "test_spectator.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 8.354056626558304e-05, "outcome": "passed"}, "call": {"duration": 0.00012003816664218903, "outcome": "passed"}, "teardown": {"duration": 7.063429802656174e-05, "outcome": "passed"}}, {"nodeid": "tests/test_spectator.py::TestSpectatorMode::test_callbacks", "lineno": 197, "outcome": "passed", "keywords": ["test_callbacks", "TestSpectatorMode", "test_spectator.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 8.119549602270126e-05, "outcome": "passed"}, "call": {"duration": 0.00010270997881889343, "outcome": "passed"}, "teardown": {"duration": 7.185898721218109e-05, "outcome": "passed"}}, {"nodeid": "tests/test_spectator.py::TestReplayRecorder::test_replay_creation", "lineno": 221, "outcome": "passed", "keywords": ["test_replay_creation", "TestReplayRecorder", "test_spectator.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 8.174870163202286e-05, "outcome": "passed"}, "call": {"duration": 9.742379188537598e-05, "outcome": "passed"}, "teardown": {"duration": 7.16308131814003e-05, "outcome": "passed"}}, {"nodeid": "tests/test_spectator.py::TestReplayRecorder::test_record_frames", "lineno": 230, "outcome": "passed", "keywords": ["test_record_frames", "TestReplayRecorder", "test_spectator.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 8.353125303983688e-05, "outcome": "passed"}, "call": {"duration": 0.00010944157838821411, "outcome": "passed"}, "teardown": {"duration": 7.149390876293182e-05, "outcome": "passed"}}, {"nodeid": "tests/test_spectator.py::TestReplayRecorder::test_max_frames_limit", "lineno": 244, "outcome": "passed", "keywords": ["test_max_frames_limit", "TestReplayRecorder", "test_spectator.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 8.278060704469681e-05, "outcome": "passed"}, "call": {"duration": 0.00013700313866138458, "outcome": "passed"}, "teardown": {"duration": 6.975047290325165e-05, "outcome": "passed"}}, {"nodeid": "tests/test_spectator.py::TestReplayRecorder::test_stop_recording", "lineno": 257, "outcome": "passed", "keywords": ["test_stop_recording", "TestReplayRecorder", "test_spectator.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 8.166488260030746e-05, "outcome": "passed"}, "call": {"duration": 0.00011016614735126495, "outcome": "passed"}, "teardown": {"duration": 6.994791328907013e-05, "outcome": "passed"}}, {"nodeid": "tests/test_spectator.py::TestReplayRecorder::test_get_frame", "lineno": 273, "outcome": "passed", "keywords": ["test_get_frame", "TestReplayRecorder", "test_spectator.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 8.470192551612854e-05, "outcome": "passed"}, "call": {"duration": 0.0001141820102930069, "outcome": "passed"}, "teardown": {"duration": 7.34301283955574e-05, "outcome": "passed"}}, {"nodeid": "tests/test_spectator.py::TestReplayRecorder::test_get_frame_at_time", "lineno": 289, "outcome": "passed", "keywords": ["test_get_frame_at_time", "TestReplayRecorder", "test_spectator.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 0.00010286830365657806, "outcome": "passed"}, "call": {"duration": 0.00011188630014657974, "outcome": "passed"}, "teardown": {"duration": 7.199402898550034e-05, "outcome": "passed"}}, {"nodeid": "tests/test_spectator.py::TestReplayRecorder::test_frame_compression", "lineno": 315, "outcome": "passed", "keywords": ["test_frame_compression", "TestReplayRecorder", "test_spectator.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 8.950755000114441e-05, "outcome": "passed"}, "call": {"duration": 0.00038388650864362717, "outcome": "passed"}, "teardown": {"duration": 8.946843445301056e-05, "outcome": "passed"}}, {"nodeid": "tests/test_spectator.py::TestReplayRecorder::test_replay_save_load", "lineno": 333, "outcome": "failed", "keywords": ["test_replay_save_load", "TestReplayRecorder", "test_spectator.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 9.405519813299179e-05, "outcome": "passed"}, "call": {"duration": 0.0003398451954126358, "outcome": "failed", "crash": {"path": "/home/justinchiu_cohere_com/.local/share/uv/python/cpython-3.12.9-linux-x86_64-gnu/lib/python3.12/json/encoder.py", "lineno": 180, "message": "TypeError: Object of type bytes is not JSON serializable"}, "traceback": [{"path": "tests/test_spectator.py", "lineno": 345, "message": "in test_replay_save_load"}, {"path": "pytermgame/spectator/replay_recorder.py", "lineno": 131, "message": "in save_to_bytes"}, {"path": "../../../../.local/share/uv/python/cpython-3.12.9-linux-x86_64-gnu/lib/python3.12/json/__init__.py", "lineno": 231, "message": "in dumps"}, {"path": "../../../../.local/share/uv/python/cpython-3.12.9-linux-x86_64-gnu/lib/python3.12/json/encoder.py", "lineno": 200, "message": "in encode"}, {"path": "../../../../.local/share/uv/python/cpython-3.12.9-linux-x86_64-gnu/lib/python3.12/json/encoder.py", "lineno": 258, "message": "in iterencode"}, {"path": "../../../../.local/share/uv/python/cpython-3.12.9-linux-x86_64-gnu/lib/python3.12/json/encoder.py", "lineno": 180, "message": "in default"}], "longrepr": "tests/test_spectator.py:345: in test_replay_save_load\n replay_data = recorder.save_to_bytes()\n ^^^^^^^^^^^^^^^^^^^^^^^^\npytermgame/spectator/replay_recorder.py:131: in save_to_bytes\n json_data = json.dumps(data).encode('utf-8')\n ^^^^^^^^^^^^^^^^\n../../../../.local/share/uv/python/cpython-3.12.9-linux-x86_64-gnu/lib/python3.12/json/__init__.py:231: in dumps\n return _default_encoder.encode(obj)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n../../../../.local/share/uv/python/cpython-3.12.9-linux-x86_64-gnu/lib/python3.12/json/encoder.py:200: in encode\n chunks = self.iterencode(o, _one_shot=True)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n../../../../.local/share/uv/python/cpython-3.12.9-linux-x86_64-gnu/lib/python3.12/json/encoder.py:258: in iterencode\n return _iterencode(o, 0)\n ^^^^^^^^^^^^^^^^^\n../../../../.local/share/uv/python/cpython-3.12.9-linux-x86_64-gnu/lib/python3.12/json/encoder.py:180: in default\n raise TypeError(f'Object of type {o.__class__.__name__} '\nE TypeError: Object of type bytes is not JSON serializable"}, "teardown": {"duration": 0.00011810474097728729, "outcome": "passed"}}, {"nodeid": "tests/test_spectator.py::TestReplayRecorder::test_get_summary", "lineno": 360, "outcome": "passed", "keywords": ["test_get_summary", "TestReplayRecorder", "test_spectator.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 0.0001046452671289444, "outcome": "passed"}, "call": {"duration": 0.00012857839465141296, "outcome": "passed"}, "teardown": {"duration": 8.020922541618347e-05, "outcome": "passed"}}, {"nodeid": "tests/test_spectator.py::test_spectator_mode_integration", "lineno": 375, "outcome": "failed", "keywords": ["test_spectator_mode_integration", "asyncio", "pytestmark", "test_spectator.py", "tests", "terminal_game_engine_multiplayer", ""], "setup": {"duration": 0.00021214596927165985, "outcome": "passed"}, "call": {"duration": 1.5029300348833203, "outcome": "failed", "crash": {"path": "/home/justinchiu_cohere_com/.local/share/uv/python/cpython-3.12.9-linux-x86_64-gnu/lib/python3.12/json/encoder.py", "lineno": 180, "message": "TypeError: Object of type bytes is not JSON serializable"}, "traceback": [{"path": "tests/test_spectator.py", "lineno": 414, "message": "in test_spectator_mode_integration"}, {"path": "pytermgame/spectator/spectator_mode.py", "lineno": 254, "message": "in save_replay"}, {"path": "pytermgame/spectator/replay_recorder.py", "lineno": 131, "message": "in save_to_bytes"}, {"path": "../../../../.local/share/uv/python/cpython-3.12.9-linux-x86_64-gnu/lib/python3.12/json/__init__.py", "lineno": 231, "message": "in dumps"}, {"path": "../../../../.local/share/uv/python/cpython-3.12.9-linux-x86_64-gnu/lib/python3.12/json/encoder.py", "lineno": 200, "message": "in encode"}, {"path": "../../../../.local/share/uv/python/cpython-3.12.9-linux-x86_64-gnu/lib/python3.12/json/encoder.py", "lineno": 258, "message": "in iterencode"}, {"path": "../../../../.local/share/uv/python/cpython-3.12.9-linux-x86_64-gnu/lib/python3.12/json/encoder.py", "lineno": 180, "message": "in default"}], "longrepr": "tests/test_spectator.py:414: in test_spectator_mode_integration\n replay_data = spectator_mode.save_replay()\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\npytermgame/spectator/spectator_mode.py:254: in save_replay\n return self.replay_recorder.save_to_bytes()\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\npytermgame/spectator/replay_recorder.py:131: in save_to_bytes\n json_data = json.dumps(data).encode('utf-8')\n ^^^^^^^^^^^^^^^^\n../../../../.local/share/uv/python/cpython-3.12.9-linux-x86_64-gnu/lib/python3.12/json/__init__.py:231: in dumps\n return _default_encoder.encode(obj)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n../../../../.local/share/uv/python/cpython-3.12.9-linux-x86_64-gnu/lib/python3.12/json/encoder.py:200: in encode\n chunks = self.iterencode(o, _one_shot=True)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n../../../../.local/share/uv/python/cpython-3.12.9-linux-x86_64-gnu/lib/python3.12/json/encoder.py:258: in iterencode\n return _iterencode(o, 0)\n ^^^^^^^^^^^^^^^^^\n../../../../.local/share/uv/python/cpython-3.12.9-linux-x86_64-gnu/lib/python3.12/json/encoder.py:180: in default\n raise TypeError(f'Object of type {o.__class__.__name__} '\nE TypeError: Object of type bytes is not JSON serializable"}, "teardown": {"duration": 0.0004794066771864891, "outcome": "passed"}}], "warnings": [{"message": "Support for class-based `config` is deprecated, use ConfigDict instead. Deprecated in Pydantic V2.0 to be removed in V3.0. See Pydantic V2 Migration Guide at https://errors.pydantic.dev/2.11/migration/", "category": "PydanticDeprecatedSince20", "when": "collect", "filename": "/home/justinchiu_cohere_com/librarybench/projects/terminal_game_engine/terminal_game_engine_multiplayer/.venv/lib/python3.12/site-packages/pydantic/_internal/_config.py", "lineno": 323}, {"message": "Support for class-based `config` is deprecated, use ConfigDict instead. Deprecated in Pydantic V2.0 to be removed in V3.0. See Pydantic V2 Migration Guide at https://errors.pydantic.dev/2.11/migration/", "category": "PydanticDeprecatedSince20", "when": "collect", "filename": "/home/justinchiu_cohere_com/librarybench/projects/terminal_game_engine/terminal_game_engine_multiplayer/.venv/lib/python3.12/site-packages/pydantic/_internal/_config.py", "lineno": 323}, {"message": "Support for class-based `config` is deprecated, use ConfigDict instead. Deprecated in Pydantic V2.0 to be removed in V3.0. See Pydantic V2 Migration Guide at https://errors.pydantic.dev/2.11/migration/", "category": "PydanticDeprecatedSince20", "when": "collect", "filename": "/home/justinchiu_cohere_com/librarybench/projects/terminal_game_engine/terminal_game_engine_multiplayer/.venv/lib/python3.12/site-packages/pydantic/_internal/_config.py", "lineno": 323}, {"message": "Support for class-based `config` is deprecated, use ConfigDict instead. Deprecated in Pydantic V2.0 to be removed in V3.0. See Pydantic V2 Migration Guide at https://errors.pydantic.dev/2.11/migration/", "category": "PydanticDeprecatedSince20", "when": "collect", "filename": "/home/justinchiu_cohere_com/librarybench/projects/terminal_game_engine/terminal_game_engine_multiplayer/.venv/lib/python3.12/site-packages/pydantic/_internal/_config.py", "lineno": 323}, {"message": "Support for class-based `config` is deprecated, use ConfigDict instead. Deprecated in Pydantic V2.0 to be removed in V3.0. See Pydantic V2 Migration Guide at https://errors.pydantic.dev/2.11/migration/", "category": "PydanticDeprecatedSince20", "when": "collect", "filename": "/home/justinchiu_cohere_com/librarybench/projects/terminal_game_engine/terminal_game_engine_multiplayer/.venv/lib/python3.12/site-packages/pydantic/_internal/_config.py", "lineno": 323}, {"message": "Support for class-based `config` is deprecated, use ConfigDict instead. Deprecated in Pydantic V2.0 to be removed in V3.0. See Pydantic V2 Migration Guide at https://errors.pydantic.dev/2.11/migration/", "category": "PydanticDeprecatedSince20", "when": "collect", "filename": "/home/justinchiu_cohere_com/librarybench/projects/terminal_game_engine/terminal_game_engine_multiplayer/.venv/lib/python3.12/site-packages/pydantic/_internal/_config.py", "lineno": 323}, {"message": "Support for class-based `config` is deprecated, use ConfigDict instead. Deprecated in Pydantic V2.0 to be removed in V3.0. See Pydantic V2 Migration Guide at https://errors.pydantic.dev/2.11/migration/", "category": "PydanticDeprecatedSince20", "when": "collect", "filename": "/home/justinchiu_cohere_com/librarybench/projects/terminal_game_engine/terminal_game_engine_multiplayer/.venv/lib/python3.12/site-packages/pydantic/_internal/_config.py", "lineno": 323}]}