import sys from pathlib import Path sys.path.insert(0, str(Path(__file__).resolve().parent.parent / "tools" / "voxel-model-eval")) import eval as ev def test_parse_models_arg_single(): assert ev.parse_models_arg("Gemma4-12B=unsloth/gemma-4-12b-it-GGUF") == [ ("Gemma4-12B", "unsloth/gemma-4-12b-it-GGUF") ] def test_parse_models_arg_multiple(): out = ev.parse_models_arg("A=org/a,B=org/b") assert out == [("A", "org/a"), ("B", "org/b")] def test_parse_models_arg_empty_returns_empty(): assert ev.parse_models_arg("") == [] def test_parse_models_arg_tolerates_whitespace(): assert ev.parse_models_arg(" A = org/a , B = org/b ") == [("A", "org/a"), ("B", "org/b")] def test_merge_rows_appends_new_model(): existing = [{"model": "A", "prompt": "cat"}] new = [{"model": "B", "prompt": "cat"}] assert ev.merge_rows(existing, new) == existing + new def test_merge_rows_overwrites_same_model(): # re-testing model A drops ALL its old rows (incl. other themes) then appends # the fresh run; model B is untouched. existing = [ {"model": "A", "prompt": "cat"}, {"model": "A", "prompt": "snake"}, {"model": "B", "prompt": "cat"}, ] new = [{"model": "A", "prompt": "cat"}, {"model": "A", "prompt": "snake"}] out = ev.merge_rows(existing, new) assert out == [{"model": "B", "prompt": "cat"}] + new # no duplicate A rows assert sum(1 for r in out if r["model"] == "A") == 2 def test_merge_rows_into_empty(): new = [{"model": "A", "prompt": "cat"}] assert ev.merge_rows([], new) == new