"""Run: python verify_ai.py. Tests specify behavior independently of AI tools."""
import math
import unittest

def buggy_average(values):
    return sum(values) / len(values) if values else 0

def average(values):
    valid = []
    for value in values:
        if value is None:
            continue
        if isinstance(value, bool) or not isinstance(value, (int, float)):
            raise TypeError('scores must be numbers or None')
        if not math.isfinite(value) or not 0 <= value <= 100:
            raise ValueError('score must be finite and between 0 and 100')
        valid.append(value)
    if not valid:
        raise ValueError('no valid scores')
    return sum(valid) / len(valid)

class AverageTests(unittest.TestCase):
    def test_normal(self):
        self.assertEqual(average([80, 90]), 85)
    def test_zero_and_missing(self):
        self.assertEqual(average([0, None, 100]), 50)
    def test_empty(self):
        for values in [[], [None, None]]:
            with self.assertRaises(ValueError):
                average(values)
    def test_invalid(self):
        for value in [-1, 101, float('nan'), float('inf')]:
            with self.assertRaises(ValueError):
                average([value])
        for value in [True, '90']:
            with self.assertRaises(TypeError):
                average([value])
    def test_permutation_and_repetition(self):
        self.assertEqual(average([20, 80]), average([80, 20]))
        self.assertEqual(average([20, 80]), average([20, 80]*3))

if __name__ == '__main__':
    unittest.main(verbosity=2)
