--- /dev/null
+#!/bin/sh
+
+[ "$1" = python3-pytest ] || exit 0
+
+# Verify version
+python3 - << EOF
+import importlib.metadata, sys
+version = importlib.metadata.version("pytest")
+if version != "$2":
+ print("Wrong version: " + version)
+ sys.exit(1)
+EOF
+[ $? -eq 0 ] || exit 1
+
+# Run pytest against a temporary suite that exercises core features
+TMPDIR=$(mktemp -d)
+trap 'rm -rf "$TMPDIR"' EXIT
+
+cat > "$TMPDIR/test_suite.py" << 'PYEOF'
+import pytest
+
+# --- basic pass/fail ---
+
+def test_passing():
+ assert 1 + 1 == 2
+
+# --- pytest.raises ---
+
+def test_raises():
+ with pytest.raises(ZeroDivisionError):
+ 1 / 0
+
+def test_raises_match():
+ with pytest.raises(ValueError, match="invalid"):
+ raise ValueError("invalid literal")
+
+# --- parametrize ---
+
+@pytest.mark.parametrize("a,b,expected", [
+ (1, 2, 3),
+ (0, 0, 0),
+ (-1, 1, 0),
+])
+def test_add(a, b, expected):
+ assert a + b == expected
+
+# --- fixtures ---
+
+@pytest.fixture
+def sample_list():
+ return [1, 2, 3]
+
+def test_fixture_used(sample_list):
+ assert len(sample_list) == 3
+ assert sum(sample_list) == 6
+
+@pytest.fixture
+def doubled(sample_list):
+ return [x * 2 for x in sample_list]
+
+def test_fixture_chaining(doubled):
+ assert doubled == [2, 4, 6]
+
+# --- skip / xfail ---
+
+@pytest.mark.skip(reason="intentional skip")
+def test_skipped():
+ assert False # never runs
+
+@pytest.mark.xfail(reason="expected failure")
+def test_xfail():
+ assert False
+
+@pytest.mark.xfail(reason="unexpectedly passes")
+def test_xpass():
+ assert True
+
+# --- capsys fixture ---
+
+def test_capsys(capsys):
+ print("hello pytest")
+ out, err = capsys.readouterr()
+ assert out == "hello pytest\n"
+ assert err == ""
+
+# --- tmp_path fixture ---
+
+def test_tmp_path(tmp_path):
+ f = tmp_path / "hello.txt"
+ f.write_text("world")
+ assert f.read_text() == "world"
+
+# --- monkeypatch fixture ---
+
+def get_value():
+ return 42
+
+def test_monkeypatch(monkeypatch):
+ import test_suite
+ monkeypatch.setattr(test_suite, "get_value", lambda: 99)
+ assert get_value() == 99
+
+PYEOF
+
+# Run pytest: expect all to pass (xpass counts as pass by default)
+python3 -m pytest "$TMPDIR/test_suite.py" -v --tb=short 2>&1
+STATUS=$?
+
+# xpass (test_xpass) causes exit code 0 by default — that's fine
+[ $STATUS -eq 0 ] || exit 1