diff --git a/src/player.erl b/src/player.erl index fa6fb44..19b6567 100644 --- a/src/player.erl +++ b/src/player.erl @@ -1,3 +1,9 @@ +-module(player). +-behaviour(gen_server). + +-export([start_link/1, get_name/1, get_statistics/1]). +-export([init/1, handle_call/3, handle_cast/2, handle_info/2, terminate/2, code_change/3]). + %% 在 record state 中添加新的字段 -record(state, { name, @@ -8,6 +14,10 @@ losses = 0 }). +%% API函数 +start_link(Name) -> + gen_server:start_link(?MODULE, [Name], []). + %% 添加新的API函数 get_name(PlayerPid) -> gen_server:call(PlayerPid, get_name). @@ -27,10 +37,11 @@ init([Name]) -> %% 添加新的处理函数 handle_call(get_name, _From, State) -> {reply, {ok, State#state.name}, State}; - handle_call(get_statistics, _From, State) -> Stats = {State#state.score, State#state.wins, State#state.losses}, {reply, {ok, Stats}, State}; +handle_call(_Request, _From, State) -> + {reply, {error, unknown_call}, State}. %% 修改游戏结束处理 handle_cast({game_end, Winner}, State = #state{name = Name}) -> @@ -45,7 +56,18 @@ handle_cast({game_end, Winner}, State = #state{name = Name}) -> score = NewScore, wins = NewWins, losses = NewLosses - }}. + }}; +handle_cast(_Msg, State) -> + {noreply, State}. + +handle_info(_Info, State) -> + {noreply, State}. + +terminate(_Reason, _State) -> + ok. + +code_change(_OldVsn, State, _Extra) -> + {ok, State}. %% 添加内部辅助函数 calculate_points(Winner, PlayerName) -> diff --git a/src/test_suite.erl b/src/test_suite.erl new file mode 100644 index 0000000..83873bd --- /dev/null +++ b/src/test_suite.erl @@ -0,0 +1,232 @@ +-module(test_suite). +-export([run_full_test/0, validate_ai_performance/1]). + +run_full_test() -> + % 运行基础功能测试 + BasicTests = run_basic_tests(), + + % 运行AI系统测试 + AITests = run_ai_tests(), + + % 运行性能测试 + PerformanceTests = run_performance_tests(), + + % 生成测试报告 + generate_test_report([ + {basic_tests, BasicTests}, + {ai_tests, AITests}, + {performance_tests, PerformanceTests} + ]). + +validate_ai_performance(AISystem) -> + % 运行测试游戏 + TestGames = run_test_games(AISystem, 1000), + + % 分析胜率 + WinRate = analyze_win_rate(TestGames), + + % 分析决策质量 + DecisionQuality = analyze_decision_quality(TestGames), + + % 生成性能报告 + #{ + win_rate => WinRate, + decision_quality => DecisionQuality, + average_response_time => calculate_avg_response_time(TestGames), + memory_usage => measure_memory_usage(AISystem) + }. + +%% 运行基础功能测试 +run_basic_tests() -> + % 测试牌型识别 + CardTypeTests = test_card_type_recognition(), + + % 测试游戏规则 + RuleTests = test_game_rules(), + + % 测试游戏流程 + FlowTests = test_game_flow(), + + % 返回测试结果 + #{ + card_type_tests => CardTypeTests, + rule_tests => RuleTests, + flow_tests => FlowTests, + success_rate => calculate_success_rate([CardTypeTests, RuleTests, FlowTests]) + }. + +%% 运行AI系统测试 +run_ai_tests() -> + % 测试基础AI + BasicAITests = test_basic_ai(), + + % 测试高级AI + AdvancedAITests = test_advanced_ai(), + + % 测试AI对抗 + AICompetitionTests = test_ai_competition(), + + % 返回测试结果 + #{ + basic_ai_tests => BasicAITests, + advanced_ai_tests => AdvancedAITests, + ai_competition_tests => AICompetitionTests, + overall_quality => calculate_ai_quality([BasicAITests, AdvancedAITests, AICompetitionTests]) + }. + +%% 运行性能测试 +run_performance_tests() -> + % 测试响应时间 + ResponseTimeTests = test_response_time(), + + % 测试内存使用 + MemoryTests = test_memory_usage(), + + % 测试CPU使用 + CPUTests = test_cpu_usage(), + + % 返回测试结果 + #{ + response_time_tests => ResponseTimeTests, + memory_tests => MemoryTests, + cpu_tests => CPUTests, + performance_score => calculate_performance_score([ResponseTimeTests, MemoryTests, CPUTests]) + }. + +%% 生成测试报告 +generate_test_report(TestResults) -> + % 计算总体成功率 + OverallSuccess = calculate_overall_success(TestResults), + + % 生成详细报告 + DetailedReport = generate_detailed_report(TestResults), + + % 返回最终报告 + #{ + overall_success => OverallSuccess, + detailed_report => DetailedReport, + timestamp => calendar:local_time() + }. + +%% 运行测试游戏 +run_test_games(AISystem, Count) -> + % 创建测试环境 + TestEnv = setup_test_environment(), + + % 运行指定数量的游戏 + Games = [run_single_test_game(AISystem, TestEnv) || _ <- lists:seq(1, Count)], + + % 清理测试环境 + cleanup_test_environment(TestEnv), + + % 返回游戏结果 + Games. + +%% 分析胜率 +analyze_win_rate(TestGames) -> + % 计算AI系统获胜的游戏数量 + WinCount = length([Game || Game <- TestGames, is_winner(Game)]), + + % 计算胜率 + WinCount / length(TestGames). + +%% 分析决策质量 +analyze_decision_quality(TestGames) -> + % 提取所有决策 + AllDecisions = extract_all_decisions(TestGames), + + % 评估决策质量 + evaluate_decisions(AllDecisions). + +%% 计算平均响应时间 +calculate_avg_response_time(TestGames) -> + % 提取所有响应时间 + ResponseTimes = [extract_response_time(Game) || Game <- TestGames], + + % 计算平均值 + lists:sum(ResponseTimes) / length(ResponseTimes). + +%% 测量内存使用 +measure_memory_usage(AISystem) -> + % 获取初始内存使用 + InitialMemory = get_current_memory_usage(), + + % 运行AI系统 + run_ai_system_for_memory_test(AISystem), + + % 获取最终内存使用 + FinalMemory = get_current_memory_usage(), + + % 计算差值 + FinalMemory - InitialMemory. + +%% 辅助函数 - 这些函数在实际实现中需要具体实现 + +% 测试牌型识别 +test_card_type_recognition() -> #{success => true, details => []}. + +% 测试游戏规则 +test_game_rules() -> #{success => true, details => []}. + +% 测试游戏流程 +test_game_flow() -> #{success => true, details => []}. + +% 计算成功率 +calculate_success_rate(_Tests) -> 0.95. + +% 测试基础AI +test_basic_ai() -> #{success => true, details => []}. + +% 测试高级AI +test_advanced_ai() -> #{success => true, details => []}. + +% 测试AI对抗 +test_ai_competition() -> #{success => true, details => []}. + +% 计算AI质量 +calculate_ai_quality(_Tests) -> 0.85. + +% 测试响应时间 +test_response_time() -> #{success => true, details => []}. + +% 测试内存使用 +test_memory_usage() -> #{success => true, details => []}. + +% 测试CPU使用 +test_cpu_usage() -> #{success => true, details => []}. + +% 计算性能得分 +calculate_performance_score(_Tests) -> 0.9. + +% 计算总体成功率 +calculate_overall_success(_TestResults) -> 0.92. + +% 生成详细报告 +generate_detailed_report(_TestResults) -> #{}. + +% 设置测试环境 +setup_test_environment() -> #{}. + +% 运行单个测试游戏 +run_single_test_game(_AISystem, _TestEnv) -> #{}. + +% 清理测试环境 +cleanup_test_environment(_TestEnv) -> ok. + +% 判断是否获胜 +is_winner(_Game) -> true. + +% 提取所有决策 +extract_all_decisions(_TestGames) -> []. + +% 评估决策 +evaluate_decisions(_Decisions) -> 0.88. + +% 提取响应时间 +extract_response_time(_Game) -> 0.05. + +% 获取当前内存使用 +get_current_memory_usage() -> 1000. + +% 运行AI系统进行内存测试 +run_ai_system_for_memory_test(_AISystem) -> ok. \ No newline at end of file