packages feed

mariadb-haskell-0.1.0.0: validation/test_runner.py

#!/usr/bin/env python3
"""Regression-policy checks, independent of MariaDB and the driver."""
import copy
import unittest
import run


class ComparisonTests(unittest.TestCase):
    def example(self):
        return {"correctness":[{"id":"one","status":"PASS"},{"id":"known","status":"FAIL"}],
                "build":{"workload_files":{"validation/run.py":"a"},"ghc":"9.10.3","cabal":"3.16.1"},
                "machine":{"machine":"arm64"},"server":{"identity":["MariaDB"]},
                "dependency_plan_sha256":"same", "benchmarks":{"read":{"status":"PASS","median_ns_per_unit":100}}}

    def test_pass_becoming_unsupported_is_a_regression(self):
        before=self.example(); after=copy.deepcopy(before)
        after["correctness"][0]["status"]="UNSUPPORTED"
        self.assertTrue(run.compare(after,before,False)["regressions"])

    def test_removing_test_is_a_regression(self):
        before=self.example(); after=copy.deepcopy(before); after["correctness"].pop(0)
        self.assertTrue(run.compare(after,before,False)["regressions"])

    def test_improvement_is_reported(self):
        before=self.example(); after=copy.deepcopy(before); after["correctness"][1]["status"]="PASS"
        self.assertEqual(run.compare(after,before,False)["improved_cases"],["known"])

    def test_slowdown_is_a_regression(self):
        before=self.example(); after=copy.deepcopy(before); after["benchmarks"]["read"]["median_ns_per_unit"]=121
        self.assertTrue(run.compare(after,before,True)["regressions"])

    def test_changed_environment_refuses_speed_comparison(self):
        before=self.example(); after=copy.deepcopy(before); after["machine"]={"machine":"x86_64"}
        self.assertTrue(run.compare(after,before,True)["regressions"])

    def test_known_failure_cannot_be_hidden_as_unavailable(self):
        before=self.example(); after=copy.deepcopy(before); after["correctness"][1]["status"]="ENVIRONMENT_UNAVAILABLE"
        self.assertTrue(run.compare(after,before,False)["regressions"])

    def test_percentile_uses_all_operation_samples(self):
        self.assertEqual(run.percentile([1,2,3,4,5],.5),3)
        self.assertAlmostEqual(run.percentile([1,2,3,4,5],.95),4.8)

    def test_new_failing_test_requires_attention(self):
        before=self.example(); after=copy.deepcopy(before)
        after["correctness"].append({"id":"new","status":"FAIL"})
        self.assertTrue(run.compare(after,before,False)["regressions"])


if __name__ == "__main__": unittest.main()