"""教材: キーワード一致と正しさを区別する。MAPLEの推論結果ではない。
Python 3 の標準ライブラリだけで動作。外部通信・モデル取得・生成コード実行なし。
"""
import inspect

KEYWORDS = ["def fibonacci", "return", "append", "[0, 1]"]


def fibonacci_wrong(n):
    # append という語があっても、処理を実装したことにはならない。
    return [0, 1]


def fibonacci_correct(n):
    result = []
    a, b = 0, 1
    for _ in range(n):
        result += [a]
        a, b = b, a + b
    return result


def check(function):
    source = inspect.getsource(function).lower()
    keyword_percent = 100 * sum(k.lower() in source for k in KEYWORDS) / len(KEYWORDS)
    cases = [(0, []), (1, [0]), (2, [0, 1]), (6, [0, 1, 1, 2, 3, 5])]
    correct = all(function(n) == expected for n, expected in cases)
    return keyword_percent, correct


if __name__ == "__main__":
    wrong = check(fibonacci_wrong)
    correct = check(fibonacci_correct)
    assert wrong == (100.0, False), wrong
    assert correct == (50.0, True), correct
    print(f"誤った固定例: キーワード {wrong[0]:.0f}% / 4ケース合格 {wrong[1]}")
    print(f"正しい固定例: キーワード {correct[0]:.0f}% / 4ケース合格 {correct[1]}")
    print("これは固定教材の結果であり、モデルの性能測定ではありません。")
