"""
测试用例模块
包含多种类型的测试题目,用于对比不同提示词策略的效果
"""
# ==================== 测试用例集合 ====================
TEST_CASES = [
# ========== 数学推理题(容易出错的) ==========
{
"id": 1,
"category": "数学推理",
"difficulty": "中等",
"question": "商店有120件衣服,第一天卖出总数的1/3,第二天卖出剩下的1/4,两天一共卖出多少件?",
"expected_answer": "80件", # 第一天40件,第二天20件,共60件
"hint": "注意第二天是卖出'剩下的'1/4,不是总数的1/4"
},
{
"id": 2,
"category": "数学推理",
"difficulty": "中等",
"question": "一件商品先涨价20%,再打8折出售,最终价格是原价的百分之几?",
"expected_answer": "96%", # 1.2 * 0.8 = 0.96
"hint": "连续百分比变化需要相乘,不是相加"
},
# ========== 逻辑推理题 ==========
{
"id": 3,
"category": "逻辑推理",
"difficulty": "困难",
"question": "所有的玫瑰都是花,有些花会很快凋谢,所以有些玫瑰会很快凋谢。这个推理正确吗?为什么?",
"expected_answer": "不正确,这是三段论中的'中项不周延'错误",
"hint": "考虑'有些花'是否一定包含'玫瑰'"
},
{
"id": 4,
"category": "逻辑推理",
"difficulty": "困难",
"question": "A、B、C三人中只有一人会游泳。A说:我会游泳。B说:我不会游泳。C说:A不会游泳。如果三人中只有一人说真话,那么谁会游泳?",
"expected_answer": "B会游泳",
"hint": "使用假设法,分别假设每个人说真话"
},
# ========== 常识应用题 ==========
{
"id": 5,
"category": "常识应用",
"difficulty": "中等",
"question": "一个池塘里的荷花,每天都会以前一天的2倍数量开放。如果到第30天荷花就开满了整个池塘,请问在第几天池塘中的荷花开了一半?",
"expected_answer": "第29天",
"hint": "每天翻倍,满池的前一天就是半池"
},
# ========== 额外测试用例(可选) ==========
{
"id": 6,
"category": "数学推理",
"difficulty": "简单",
"question": "一个数加上10,乘以2,减去5,等于35。这个数是多少?",
"expected_answer": "15", # (35+5)/2 - 10 = 15
"hint": "使用逆向思维,从结果倒推"
},
{
"id": 7,
"category": "逻辑推理",
"difficulty": "中等",
"question": "如果所有的猫都喜欢鱼,而有些喜欢鱼的动物是宠物,那么能否推出有些猫是宠物?",
"expected_answer": "不能推出,这是无效的三段论推理",
"hint": "分析中项'喜欢鱼的动物'的周延性"
}
]
# ==================== 按类别分组的测试用例 ====================
TEST_CASES_BY_CATEGORY = {}
for case in TEST_CASES:
category = case["category"]
if category not in TEST_CASES_BY_CATEGORY:
TEST_CASES_BY_CATEGORY[category] = []
TEST_CASES_BY_CATEGORY[category].append(case)
# ==================== 便捷函数 ====================
def get_test_case(case_id):
"""
根据ID获取测试用例
Args:
case_id: 测试用例ID
Returns:
dict: 测试用例字典,如果不存在返回None
"""
for case in TEST_CASES:
if case["id"] == case_id:
return case
return None
def get_test_cases_by_category(category):
"""
根据类别获取测试用例
Args:
category: 类别名称
Returns:
list: 该类别下的所有测试用例
"""
return TEST_CASES_BY_CATEGORY.get(category, [])
def list_categories():
"""
列出所有可用的类别
Returns:
list: 类别名称列表
"""
return list(TEST_CASES_BY_CATEGORY.keys())
def get_test_cases_by_difficulty(difficulty):
"""
根据难度获取测试用例
Args:
difficulty: 难度级别(简单/中等/困难)
Returns:
list: 该难度下的所有测试用例
"""
return [case for case in TEST_CASES if case["difficulty"] == difficulty]