๐Ÿ’ป Exercise: Exercise: Detect regressions between runs

๐Ÿ“ Instructions

Write regression_diff(before, after). Match traces by 'task_id'. Return {'regressions': [...], 'fixes': [...]} where regressions are task ids successful in before but not in after, and fixes are the reverse. Both lists sorted; only consider task ids present in both runs. Standard library only.

๐Ÿงช Initial Code / Tests

๐Ÿ“„ evaluate.py
from unittest import TestCase
from exercise import regression_diff


class Evaluate(TestCase):
    def test_detects_regression(self):
        before = [{'task_id': 't1', 'success': True}]
        after = [{'task_id': 't1', 'success': False}]
        self.assertEqual(regression_diff(before, after)['regressions'], ['t1'])

    def test_detects_fix(self):
        before = [{'task_id': 't1', 'success': False}]
        after = [{'task_id': 't1', 'success': True}]
        self.assertEqual(regression_diff(before, after)['fixes'], ['t1'])

    def test_unchanged_has_no_diff(self):
        before = [{'task_id': 't1', 'success': True}]
        after = [{'task_id': 't1', 'success': True}]
        self.assertEqual(regression_diff(before, after), {'regressions': [], 'fixes': []})

โœ… Solutions

๐Ÿ“„ exercise.py
def regression_diff(before, after):
    b = {t['task_id']: bool(t.get('success')) for t in before}
    a = {t['task_id']: bool(t.get('success')) for t in after}
    common = b.keys() & a.keys()
    regressions = sorted(tid for tid in common if b[tid] and not a[tid])
    fixes = sorted(tid for tid in common if not b[tid] and a[tid])
    return {'regressions': regressions, 'fixes': fixes}