Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 23 additions & 0 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
repos:
- repo: local
hooks:
- id: ruff
name: ruff
entry: uv run ruff check .
language: system
pass_filenames: false
- id: ty
name: ty
entry: uv run ty check
language: system
pass_filenames: false
- id: vulture
name: vulture
entry: uv run vulture src tests scripts --min-confidence 80
language: system
pass_filenames: false
- id: pytest
name: pytest
entry: uv run pytest
language: system
pass_filenames: false
2 changes: 1 addition & 1 deletion examples/calculator/calculator/tests/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@

import json
import shlex
from pathlib import Path

import pytest
from pathlib import Path


def pytest_addoption(parser):
Expand Down
21 changes: 10 additions & 11 deletions examples/calculator/calculator/tests/test_checkpoint_1.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
"""Tests for checkpoint_1: Basic arithmetic operations."""

import contextlib
import json
import subprocess
from pathlib import Path
Expand Down Expand Up @@ -37,10 +38,8 @@ def parse_calculator_output(stdout: str) -> list:
value = value.strip()
else:
value = line
try:
with contextlib.suppress(ValueError):
results.append(float(value))
except ValueError:
pass
return results


Expand All @@ -49,24 +48,24 @@ def test_add_operations(entrypoint_argv, test_data_dir):
case_dir = test_data_dir / "checkpoint_1" / "core" / "add"
stdin, expected = load_input_result(case_dir)

result = subprocess.run(
result = subprocess.run( # noqa: S603
entrypoint_argv + ["--eval"],
input=stdin,
capture_output=True,
text=True,
timeout=30,
)

assert result.returncode == 0, f"Expected exit code 0, got {result.returncode}. stderr: {result.stderr}"
assert result.returncode == 0, f"Expected exit code 0, got {result.returncode}. stderr: {result.stderr}" # noqa: S101

actual_results = parse_calculator_output(result.stdout)
expected_results = expected.get("results", [])

assert len(actual_results) == len(expected_results), \
f"Expected {len(expected_results)} results, got {len(actual_results)}"
f"Expected {len(expected_results)} results, got {len(actual_results)}" # noqa: S101

for i, (actual, exp) in enumerate(zip(actual_results, expected_results)):
assert actual == exp, f"Result {i}: expected {exp}, got {actual}"
assert actual == exp, f"Result {i}: expected {exp}, got {actual}" # noqa: S101


@pytest.mark.error
Expand All @@ -75,7 +74,7 @@ def test_invalid_equation(entrypoint_argv, test_data_dir):
case_file = test_data_dir / "checkpoint_1" / "errors" / "invalid_equation.yaml"
case = load_error_case(case_file)

result = subprocess.run(
result = subprocess.run( # noqa: S603
entrypoint_argv + ["--eval"],
input=case["stdin"],
capture_output=True,
Expand All @@ -85,7 +84,7 @@ def test_invalid_equation(entrypoint_argv, test_data_dir):

expected_code = case["expected"]["status_code"]
assert result.returncode == expected_code, \
f"Expected exit code {expected_code}, got {result.returncode}"
f"Expected exit code {expected_code}, got {result.returncode}" # noqa: S101


@pytest.mark.error
Expand All @@ -94,7 +93,7 @@ def test_zero_division(entrypoint_argv, test_data_dir):
case_file = test_data_dir / "checkpoint_1" / "errors" / "zero_division.yaml"
case = load_error_case(case_file)

result = subprocess.run(
result = subprocess.run( # noqa: S603
entrypoint_argv + ["--eval"],
input=case["stdin"],
capture_output=True,
Expand All @@ -104,4 +103,4 @@ def test_zero_division(entrypoint_argv, test_data_dir):

expected_code = case["expected"]["status_code"]
assert result.returncode == expected_code, \
f"Expected exit code {expected_code}, got {result.returncode}"
f"Expected exit code {expected_code}, got {result.returncode}" # noqa: S101
39 changes: 19 additions & 20 deletions examples/calculator/calculator/tests/test_checkpoint_2.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
"""Tests for checkpoint_2: Variable assignment and usage."""

import contextlib
import json
import subprocess
from pathlib import Path
Expand Down Expand Up @@ -37,10 +38,8 @@ def parse_calculator_output(stdout: str) -> list:
value = value.strip()
else:
value = line
try:
with contextlib.suppress(ValueError):
results.append(float(value))
except ValueError:
pass
return results


Expand All @@ -49,24 +48,24 @@ def test_complex_math(entrypoint_argv, test_data_dir):
case_dir = test_data_dir / "checkpoint_2" / "core" / "complex_math"
stdin, expected = load_input_result(case_dir)

result = subprocess.run(
result = subprocess.run( # noqa: S603
entrypoint_argv + ["--eval"],
input=stdin,
capture_output=True,
text=True,
timeout=30,
)

assert result.returncode == 0, f"Expected exit code 0, got {result.returncode}. stderr: {result.stderr}"
assert result.returncode == 0, f"Expected exit code 0, got {result.returncode}. stderr: {result.stderr}" # noqa: S101

actual_results = parse_calculator_output(result.stdout)
expected_results = expected.get("results", [])

assert len(actual_results) == len(expected_results), \
f"Expected {len(expected_results)} results, got {len(actual_results)}"
f"Expected {len(expected_results)} results, got {len(actual_results)}" # noqa: S101

for i, (actual, exp) in enumerate(zip(actual_results, expected_results)):
assert actual == exp, f"Result {i}: expected {exp}, got {actual}"
assert actual == exp, f"Result {i}: expected {exp}, got {actual}" # noqa: S101


@pytest.mark.functionality
Expand All @@ -75,21 +74,21 @@ def test_variable_assignment(entrypoint_argv, test_data_dir):
case_dir = test_data_dir / "checkpoint_2" / "variables" / "assignment"
stdin, expected = load_input_result(case_dir)

result = subprocess.run(
result = subprocess.run( # noqa: S603
entrypoint_argv + ["--eval"],
input=stdin,
capture_output=True,
text=True,
timeout=30,
)

assert result.returncode == 0, f"Expected exit code 0, got {result.returncode}. stderr: {result.stderr}"
assert result.returncode == 0, f"Expected exit code 0, got {result.returncode}. stderr: {result.stderr}" # noqa: S101

actual_results = parse_calculator_output(result.stdout)
expected_results = expected.get("results", [])

for i, (actual, exp) in enumerate(zip(actual_results, expected_results)):
assert actual == exp, f"Result {i}: expected {exp}, got {actual}"
assert actual == exp, f"Result {i}: expected {exp}, got {actual}" # noqa: S101


@pytest.mark.functionality
Expand All @@ -98,21 +97,21 @@ def test_variable_reassignment(entrypoint_argv, test_data_dir):
case_dir = test_data_dir / "checkpoint_2" / "variables" / "reassignment"
stdin, expected = load_input_result(case_dir)

result = subprocess.run(
result = subprocess.run( # noqa: S603
entrypoint_argv + ["--eval"],
input=stdin,
capture_output=True,
text=True,
timeout=30,
)

assert result.returncode == 0, f"Expected exit code 0, got {result.returncode}. stderr: {result.stderr}"
assert result.returncode == 0, f"Expected exit code 0, got {result.returncode}. stderr: {result.stderr}" # noqa: S101

actual_results = parse_calculator_output(result.stdout)
expected_results = expected.get("results", [])

for i, (actual, exp) in enumerate(zip(actual_results, expected_results)):
assert actual == exp, f"Result {i}: expected {exp}, got {actual}"
assert actual == exp, f"Result {i}: expected {exp}, got {actual}" # noqa: S101


@pytest.mark.functionality
Expand All @@ -121,21 +120,21 @@ def test_multiple_variables(entrypoint_argv, test_data_dir):
case_dir = test_data_dir / "checkpoint_2" / "variables" / "multiple"
stdin, expected = load_input_result(case_dir)

result = subprocess.run(
result = subprocess.run( # noqa: S603
entrypoint_argv + ["--eval"],
input=stdin,
capture_output=True,
text=True,
timeout=30,
)

assert result.returncode == 0, f"Expected exit code 0, got {result.returncode}. stderr: {result.stderr}"
assert result.returncode == 0, f"Expected exit code 0, got {result.returncode}. stderr: {result.stderr}" # noqa: S101

actual_results = parse_calculator_output(result.stdout)
expected_results = expected.get("results", [])

for i, (actual, exp) in enumerate(zip(actual_results, expected_results)):
assert actual == exp, f"Result {i}: expected {exp}, got {actual}"
assert actual == exp, f"Result {i}: expected {exp}, got {actual}" # noqa: S101


@pytest.mark.error
Expand All @@ -144,7 +143,7 @@ def test_invalid_var_name(entrypoint_argv, test_data_dir):
case_file = test_data_dir / "checkpoint_2" / "errors" / "invalid_var_name.yaml"
case = load_error_case(case_file)

result = subprocess.run(
result = subprocess.run( # noqa: S603
entrypoint_argv + ["--eval"],
input=case["stdin"],
capture_output=True,
Expand All @@ -154,7 +153,7 @@ def test_invalid_var_name(entrypoint_argv, test_data_dir):

expected_code = case["expected"]["status_code"]
assert result.returncode == expected_code, \
f"Expected exit code {expected_code}, got {result.returncode}"
f"Expected exit code {expected_code}, got {result.returncode}" # noqa: S101


@pytest.mark.error
Expand All @@ -163,7 +162,7 @@ def test_undefined_var(entrypoint_argv, test_data_dir):
case_file = test_data_dir / "checkpoint_2" / "errors" / "undefined_var.yaml"
case = load_error_case(case_file)

result = subprocess.run(
result = subprocess.run( # noqa: S603
entrypoint_argv + ["--eval"],
input=case["stdin"],
capture_output=True,
Expand All @@ -173,4 +172,4 @@ def test_undefined_var(entrypoint_argv, test_data_dir):

expected_code = case["expected"]["status_code"]
assert result.returncode == expected_code, \
f"Expected exit code {expected_code}, got {result.returncode}"
f"Expected exit code {expected_code}, got {result.returncode}" # noqa: S101
Loading