💻 源码
"""
测试用例模块
包含多种类型的测试题目,用于对比不同提示词策略的效果
"""

# ==================== 测试用例集合 ====================
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]