From 630460a17ec58882fd7a2a9e629371bc891b7703 Mon Sep 17 00:00:00 2001 From: Arthur Pastel Date: Thu, 19 Sep 2024 15:03:16 +0200 Subject: [PATCH 1/4] test: add benches for TheAlgorithms/backtracking --- .../backtracking/test_bench_all_combinations.py | 17 +++++++++++++++++ .../backtracking/test_bench_all_permutations.py | 11 +++++++++++ .../backtracking/test_bench_all_subsequences.py | 11 +++++++++++ .../backtracking/test_bench_coloring.py | 13 +++++++++++++ .../backtracking/test_bench_combination_sum.py | 7 +++++++ .../test_bench_crossword_puzzle_solver.py | 7 +++++++ .../test_bench_generate_parentheses.py | 6 ++++++ .../test_bench_hamiltonian_cycle.py | 12 ++++++++++++ .../backtracking/test_bench_knight_tour.py | 13 +++++++++++++ .../test_bench_match_word_pattern.py | 5 +++++ .../backtracking/test_bench_minimax.py | 9 +++++++++ .../backtracking/test_bench_n_queens.py | 11 +++++++++++ .../backtracking/test_bench_n_queens_math.py | 6 ++++++ .../backtracking/test_bench_power_sum.py | 5 +++++ .../backtracking/test_bench_rat_in_maze.py | 12 ++++++++++++ .../backtracking/test_bench_sudoku.py | 16 ++++++++++++++++ .../backtracking/test_bench_sum_of_subsets.py | 7 +++++++ .../backtracking/test_bench_word_search.py | 7 +++++++ 18 files changed, 175 insertions(+) create mode 100644 tests/benchmarks/TheAlgorithms_bench/backtracking/test_bench_all_combinations.py create mode 100644 tests/benchmarks/TheAlgorithms_bench/backtracking/test_bench_all_permutations.py create mode 100644 tests/benchmarks/TheAlgorithms_bench/backtracking/test_bench_all_subsequences.py create mode 100644 tests/benchmarks/TheAlgorithms_bench/backtracking/test_bench_coloring.py create mode 100644 tests/benchmarks/TheAlgorithms_bench/backtracking/test_bench_combination_sum.py create mode 100644 tests/benchmarks/TheAlgorithms_bench/backtracking/test_bench_crossword_puzzle_solver.py create mode 100644 tests/benchmarks/TheAlgorithms_bench/backtracking/test_bench_generate_parentheses.py create mode 100644 tests/benchmarks/TheAlgorithms_bench/backtracking/test_bench_hamiltonian_cycle.py create mode 100644 tests/benchmarks/TheAlgorithms_bench/backtracking/test_bench_knight_tour.py create mode 100644 tests/benchmarks/TheAlgorithms_bench/backtracking/test_bench_match_word_pattern.py create mode 100644 tests/benchmarks/TheAlgorithms_bench/backtracking/test_bench_minimax.py create mode 100644 tests/benchmarks/TheAlgorithms_bench/backtracking/test_bench_n_queens.py create mode 100644 tests/benchmarks/TheAlgorithms_bench/backtracking/test_bench_n_queens_math.py create mode 100644 tests/benchmarks/TheAlgorithms_bench/backtracking/test_bench_power_sum.py create mode 100644 tests/benchmarks/TheAlgorithms_bench/backtracking/test_bench_rat_in_maze.py create mode 100644 tests/benchmarks/TheAlgorithms_bench/backtracking/test_bench_sudoku.py create mode 100644 tests/benchmarks/TheAlgorithms_bench/backtracking/test_bench_sum_of_subsets.py create mode 100644 tests/benchmarks/TheAlgorithms_bench/backtracking/test_bench_word_search.py diff --git a/tests/benchmarks/TheAlgorithms_bench/backtracking/test_bench_all_combinations.py b/tests/benchmarks/TheAlgorithms_bench/backtracking/test_bench_all_combinations.py new file mode 100644 index 0000000..151964d --- /dev/null +++ b/tests/benchmarks/TheAlgorithms_bench/backtracking/test_bench_all_combinations.py @@ -0,0 +1,17 @@ +from backtracking.all_combinations import combination_lists, generate_all_combinations + + +def test_combination_lists(benchmark): + benchmark(combination_lists, n=4, k=2) + + +def test_generate_all_combinations(benchmark): + benchmark(generate_all_combinations, n=4, k=2) + + +def test_generate_all_combinations_edge_case(benchmark): + benchmark(generate_all_combinations, n=0, k=0) + + +def test_generate_all_combinations_larger(benchmark): + benchmark(generate_all_combinations, n=5, k=4) diff --git a/tests/benchmarks/TheAlgorithms_bench/backtracking/test_bench_all_permutations.py b/tests/benchmarks/TheAlgorithms_bench/backtracking/test_bench_all_permutations.py new file mode 100644 index 0000000..e2ac225 --- /dev/null +++ b/tests/benchmarks/TheAlgorithms_bench/backtracking/test_bench_all_permutations.py @@ -0,0 +1,11 @@ +from backtracking.all_permutations import generate_all_permutations + + +def test_generate_all_permutations(benchmark): + sequence = [1, 2, 3] + benchmark(generate_all_permutations, sequence) + + +def test_generate_all_permutations_str(benchmark): + sequence = ["A", "B", "C"] + benchmark(generate_all_permutations, sequence) diff --git a/tests/benchmarks/TheAlgorithms_bench/backtracking/test_bench_all_subsequences.py b/tests/benchmarks/TheAlgorithms_bench/backtracking/test_bench_all_subsequences.py new file mode 100644 index 0000000..7be9000 --- /dev/null +++ b/tests/benchmarks/TheAlgorithms_bench/backtracking/test_bench_all_subsequences.py @@ -0,0 +1,11 @@ +from backtracking.all_subsequences import generate_all_subsequences + + +def test_generate_all_subsequences(benchmark): + sequence = [3, 2, 1] + benchmark(generate_all_subsequences, sequence) + + +def test_generate_all_subsequences_str(benchmark): + sequence = ["A", "B"] + benchmark(generate_all_subsequences, sequence) diff --git a/tests/benchmarks/TheAlgorithms_bench/backtracking/test_bench_coloring.py b/tests/benchmarks/TheAlgorithms_bench/backtracking/test_bench_coloring.py new file mode 100644 index 0000000..da6f854 --- /dev/null +++ b/tests/benchmarks/TheAlgorithms_bench/backtracking/test_bench_coloring.py @@ -0,0 +1,13 @@ +from backtracking.coloring import color + + +def test_color(benchmark): + graph = [ + [0, 1, 0, 0, 0], + [1, 0, 1, 0, 1], + [0, 1, 0, 1, 0], + [0, 1, 1, 0, 0], + [0, 1, 0, 0, 0], + ] + max_colors = 3 + benchmark(color, graph, max_colors) diff --git a/tests/benchmarks/TheAlgorithms_bench/backtracking/test_bench_combination_sum.py b/tests/benchmarks/TheAlgorithms_bench/backtracking/test_bench_combination_sum.py new file mode 100644 index 0000000..e180c31 --- /dev/null +++ b/tests/benchmarks/TheAlgorithms_bench/backtracking/test_bench_combination_sum.py @@ -0,0 +1,7 @@ +from backtracking.combination_sum import combination_sum + + +def test_combination_sum(benchmark): + candidates = [2, 3, 5] + target = 8 + benchmark(combination_sum, candidates, target) diff --git a/tests/benchmarks/TheAlgorithms_bench/backtracking/test_bench_crossword_puzzle_solver.py b/tests/benchmarks/TheAlgorithms_bench/backtracking/test_bench_crossword_puzzle_solver.py new file mode 100644 index 0000000..647f91c --- /dev/null +++ b/tests/benchmarks/TheAlgorithms_bench/backtracking/test_bench_crossword_puzzle_solver.py @@ -0,0 +1,7 @@ +from backtracking.crossword_puzzle_solver import solve_crossword + + +def test_solve_crossword(benchmark): + puzzle = [[""] * 3 for _ in range(3)] + words = ["cat", "dog", "car"] + benchmark(solve_crossword, puzzle, words) diff --git a/tests/benchmarks/TheAlgorithms_bench/backtracking/test_bench_generate_parentheses.py b/tests/benchmarks/TheAlgorithms_bench/backtracking/test_bench_generate_parentheses.py new file mode 100644 index 0000000..fb2960c --- /dev/null +++ b/tests/benchmarks/TheAlgorithms_bench/backtracking/test_bench_generate_parentheses.py @@ -0,0 +1,6 @@ +from backtracking.generate_parentheses import generate_parenthesis + + +def test_generate_parenthesis(benchmark): + n = 3 + benchmark(generate_parenthesis, n) diff --git a/tests/benchmarks/TheAlgorithms_bench/backtracking/test_bench_hamiltonian_cycle.py b/tests/benchmarks/TheAlgorithms_bench/backtracking/test_bench_hamiltonian_cycle.py new file mode 100644 index 0000000..368d643 --- /dev/null +++ b/tests/benchmarks/TheAlgorithms_bench/backtracking/test_bench_hamiltonian_cycle.py @@ -0,0 +1,12 @@ +from backtracking.hamiltonian_cycle import hamilton_cycle + + +def test_hamilton_cycle(benchmark): + graph = [ + [0, 1, 0, 1, 0], + [1, 0, 1, 1, 1], + [0, 1, 0, 0, 1], + [1, 1, 0, 0, 1], + [0, 1, 1, 1, 0], + ] + benchmark(hamilton_cycle, graph) diff --git a/tests/benchmarks/TheAlgorithms_bench/backtracking/test_bench_knight_tour.py b/tests/benchmarks/TheAlgorithms_bench/backtracking/test_bench_knight_tour.py new file mode 100644 index 0000000..cf6914e --- /dev/null +++ b/tests/benchmarks/TheAlgorithms_bench/backtracking/test_bench_knight_tour.py @@ -0,0 +1,13 @@ +from backtracking.knight_tour import get_valid_pos, is_complete, open_knight_tour + + +def test_get_valid_pos(benchmark): + benchmark(get_valid_pos, (1, 3), 4) + + +def test_is_complete(benchmark): + benchmark(is_complete, [[1]]) + + +def test_open_knight_tour(benchmark): + benchmark(open_knight_tour, 1) diff --git a/tests/benchmarks/TheAlgorithms_bench/backtracking/test_bench_match_word_pattern.py b/tests/benchmarks/TheAlgorithms_bench/backtracking/test_bench_match_word_pattern.py new file mode 100644 index 0000000..302a812 --- /dev/null +++ b/tests/benchmarks/TheAlgorithms_bench/backtracking/test_bench_match_word_pattern.py @@ -0,0 +1,5 @@ +from backtracking.match_word_pattern import match_word_pattern + + +def test_match_word_pattern(benchmark): + benchmark(match_word_pattern, "aba", "GraphTreesGraph") diff --git a/tests/benchmarks/TheAlgorithms_bench/backtracking/test_bench_minimax.py b/tests/benchmarks/TheAlgorithms_bench/backtracking/test_bench_minimax.py new file mode 100644 index 0000000..57ab2ab --- /dev/null +++ b/tests/benchmarks/TheAlgorithms_bench/backtracking/test_bench_minimax.py @@ -0,0 +1,9 @@ +import math + +from backtracking.minimax import minimax + + +def test_minimax(benchmark): + scores = [90, 23, 6, 33, 21, 65, 123, 34423] + height = math.log(len(scores), 2) + benchmark(minimax, 0, 0, True, scores, height) diff --git a/tests/benchmarks/TheAlgorithms_bench/backtracking/test_bench_n_queens.py b/tests/benchmarks/TheAlgorithms_bench/backtracking/test_bench_n_queens.py new file mode 100644 index 0000000..4e7616e --- /dev/null +++ b/tests/benchmarks/TheAlgorithms_bench/backtracking/test_bench_n_queens.py @@ -0,0 +1,11 @@ +from backtracking.n_queens import is_safe, solve + + +def test_is_safe(benchmark): + board = [[0, 0, 0], [0, 0, 0], [0, 0, 0]] + benchmark(is_safe, board, 1, 1) + + +def test_solve(benchmark): + board = [[0 for i in range(4)] for j in range(4)] + benchmark(solve, board, 0) diff --git a/tests/benchmarks/TheAlgorithms_bench/backtracking/test_bench_n_queens_math.py b/tests/benchmarks/TheAlgorithms_bench/backtracking/test_bench_n_queens_math.py new file mode 100644 index 0000000..74d88c7 --- /dev/null +++ b/tests/benchmarks/TheAlgorithms_bench/backtracking/test_bench_n_queens_math.py @@ -0,0 +1,6 @@ +from backtracking.n_queens_math import depth_first_search + + +def test_depth_first_search(benchmark): + boards = [] + benchmark(depth_first_search, [], [], [], boards, 4) diff --git a/tests/benchmarks/TheAlgorithms_bench/backtracking/test_bench_power_sum.py b/tests/benchmarks/TheAlgorithms_bench/backtracking/test_bench_power_sum.py new file mode 100644 index 0000000..68afdd3 --- /dev/null +++ b/tests/benchmarks/TheAlgorithms_bench/backtracking/test_bench_power_sum.py @@ -0,0 +1,5 @@ +from backtracking.power_sum import solve + + +def test_solve(benchmark): + benchmark(solve, 13, 2) diff --git a/tests/benchmarks/TheAlgorithms_bench/backtracking/test_bench_rat_in_maze.py b/tests/benchmarks/TheAlgorithms_bench/backtracking/test_bench_rat_in_maze.py new file mode 100644 index 0000000..3ff51be --- /dev/null +++ b/tests/benchmarks/TheAlgorithms_bench/backtracking/test_bench_rat_in_maze.py @@ -0,0 +1,12 @@ +from backtracking.rat_in_maze import solve_maze + + +def test_solve_maze(benchmark): + maze = [ + [0, 1, 0, 1, 1], + [0, 0, 0, 0, 0], + [1, 0, 1, 0, 1], + [0, 0, 1, 0, 0], + [1, 0, 0, 1, 0], + ] + benchmark(solve_maze, maze, 0, 0, len(maze) - 1, len(maze) - 1) diff --git a/tests/benchmarks/TheAlgorithms_bench/backtracking/test_bench_sudoku.py b/tests/benchmarks/TheAlgorithms_bench/backtracking/test_bench_sudoku.py new file mode 100644 index 0000000..7f529e9 --- /dev/null +++ b/tests/benchmarks/TheAlgorithms_bench/backtracking/test_bench_sudoku.py @@ -0,0 +1,16 @@ +from backtracking.sudoku import sudoku + + +def test_sudoku(benchmark): + initial_grid = [ + [3, 0, 6, 5, 0, 8, 4, 0, 0], + [5, 2, 0, 0, 0, 0, 0, 0, 0], + [0, 8, 7, 0, 0, 0, 0, 3, 1], + [0, 0, 3, 0, 1, 0, 0, 8, 0], + [9, 0, 0, 8, 6, 3, 0, 0, 5], + [0, 5, 0, 0, 9, 0, 6, 0, 0], + [1, 3, 0, 0, 0, 0, 2, 5, 0], + [0, 0, 0, 0, 0, 0, 0, 7, 4], + [0, 0, 5, 2, 0, 6, 3, 0, 0], + ] + benchmark(sudoku, initial_grid) diff --git a/tests/benchmarks/TheAlgorithms_bench/backtracking/test_bench_sum_of_subsets.py b/tests/benchmarks/TheAlgorithms_bench/backtracking/test_bench_sum_of_subsets.py new file mode 100644 index 0000000..fc0ef02 --- /dev/null +++ b/tests/benchmarks/TheAlgorithms_bench/backtracking/test_bench_sum_of_subsets.py @@ -0,0 +1,7 @@ +from backtracking.sum_of_subsets import generate_sum_of_subsets_soln + + +def test_generate_sum_of_subsets_soln(benchmark): + nums = [3, 34, 4, 12, 5, 2] + max_sum = 9 + benchmark(generate_sum_of_subsets_soln, nums, max_sum) diff --git a/tests/benchmarks/TheAlgorithms_bench/backtracking/test_bench_word_search.py b/tests/benchmarks/TheAlgorithms_bench/backtracking/test_bench_word_search.py new file mode 100644 index 0000000..a617304 --- /dev/null +++ b/tests/benchmarks/TheAlgorithms_bench/backtracking/test_bench_word_search.py @@ -0,0 +1,7 @@ +from backtracking.word_search import word_exists + + +def test_word_exists(benchmark): + board = [["A", "B", "C", "E"], ["S", "F", "C", "S"], ["A", "D", "E", "E"]] + word = "ABCCED" + benchmark(word_exists, board, word) From d91f88f7630b900c3cfb131abb0c1db6e3a27e31 Mon Sep 17 00:00:00 2001 From: Arthur Pastel Date: Thu, 19 Sep 2024 19:28:56 +0200 Subject: [PATCH 2/4] feat: also store the semver version --- .github/workflows/ci.yml | 2 +- pyproject.toml | 3 ++- scripts/generate_semver.py | 41 +++++++++++++++++++++++++++++++++ scripts/release.sh | 1 + src/pytest_codspeed/__init__.py | 2 ++ tests/test_generate_semver.py | 19 +++++++++++++++ 6 files changed, 66 insertions(+), 2 deletions(-) create mode 100644 scripts/generate_semver.py create mode 100644 tests/test_generate_semver.py diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 8247e14..1ee2804 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -52,7 +52,7 @@ jobs: name: Install valgrind run: sudo apt-get install valgrind -y - name: Install dependencies with pytest${{ matrix.pytest-version }} - run: pip install .[dev,compat] "pytest${{ matrix.pytest-version }}" + run: pip install .[dev,compat,build] "pytest${{ matrix.pytest-version }}" - if: matrix.config != 'pytest-benchmark' name: Uninstall pytest-benchmark run: pip uninstall -y pytest-benchmark diff --git a/pyproject.toml b/pyproject.toml index 2095bf5..85e0144 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -46,6 +46,7 @@ dependencies = [ ] [project.optional-dependencies] +build = ["semver>=3.0.2"] lint = ["mypy ~= 1.11.2", "ruff ~= 0.6.5"] compat = [ "pytest-benchmark ~= 4.0.0", @@ -94,7 +95,7 @@ float_to_top = true [tool.pytest.ini_options] addopts = "--ignore=tests/benchmarks --ignore=tests/examples --ignore=tests/benchmarks/TheAlgorithms" filterwarnings = ["ignore::DeprecationWarning:pytest_benchmark.utils.*:"] -pythonpath = ["tests/benchmarks/TheAlgorithms"] +pythonpath = ["tests/benchmarks/TheAlgorithms", "./scripts"] [tool.coverage.run] branch = true diff --git a/scripts/generate_semver.py b/scripts/generate_semver.py new file mode 100644 index 0000000..98372b2 --- /dev/null +++ b/scripts/generate_semver.py @@ -0,0 +1,41 @@ +""" +This script converts a PyPI version string to a semantic version string and updates the +__semver_version__ variable in the __init__.py file of the pytest_codspeed package. +""" + +import re +from pathlib import Path + +from packaging.version import Version as PyPIVersion +from semver import Version as SemVerVersion + + +def pypi_version_to_semver(pypi_version_str: str) -> str: + py_version = PyPIVersion(pypi_version_str) + if py_version.epoch != 0: + raise ValueError("Can't convert an epoch to semver") + if py_version.post is not None: + raise ValueError("Can't convert a post part to semver") + + pre = None if not py_version.pre else "".join([str(i) for i in py_version.pre]) + semver = SemVerVersion(*py_version.release, prerelease=pre, build=py_version.dev) + return str(semver) + + +def main(): + from pytest_codspeed import __version__ as pypi_version + + semver_version = pypi_version_to_semver(pypi_version) + init_file_path = Path("./src/pytest_codspeed/__init__.py") + content = init_file_path.read_text() + + content = re.sub( + r'__semver_version__\s*=\s*".*"', + f'__semver_version__ = "{semver_version}"', + content, + ) + init_file_path.write_text(content) + + +if __name__ == "__main__": + main() diff --git a/scripts/release.sh b/scripts/release.sh index dd769bd..6db80b7 100755 --- a/scripts/release.sh +++ b/scripts/release.sh @@ -8,6 +8,7 @@ if [ $# -ne 1 ]; then fi hatch version $1 +python scripts/generate_semver.py NEW_VERSION=$(hatch version) git add src/pytest_codspeed/__init__.py # Fail if there are any unstaged changes left diff --git a/src/pytest_codspeed/__init__.py b/src/pytest_codspeed/__init__.py index 2bc9a83..155891d 100644 --- a/src/pytest_codspeed/__init__.py +++ b/src/pytest_codspeed/__init__.py @@ -1,4 +1,6 @@ __version__ = "3.0.0b0" +# We also have the semver version since __version__ is not semver compliant +__semver_version__ = "3.0.0-b0" from .plugin import BenchmarkFixture diff --git a/tests/test_generate_semver.py b/tests/test_generate_semver.py new file mode 100644 index 0000000..b2a8c24 --- /dev/null +++ b/tests/test_generate_semver.py @@ -0,0 +1,19 @@ +import pytest +from generate_semver import pypi_version_to_semver + + +def test_pypi_version_to_semver_valid(): + # Test cases for valid PyPI version strings + assert pypi_version_to_semver("1.0.0") == "1.0.0" + assert pypi_version_to_semver("1.0.0a1") == "1.0.0-a1" + assert pypi_version_to_semver("1.0.0b1") == "1.0.0-b1" + assert pypi_version_to_semver("1.0.0rc1") == "1.0.0-rc1" + + +def test_pypi_version_to_semver_invalid(): + # Test cases for invalid PyPI version strings that should raise ValueError + with pytest.raises(ValueError, match="Can't convert an epoch to semver"): + pypi_version_to_semver("1!1.0.0") + + with pytest.raises(ValueError, match="Can't convert a post part to semver"): + pypi_version_to_semver("1.0.0.post") From 4ce0c4189892a0b54a9d4e930a9ec20a0d84a665 Mon Sep 17 00:00:00 2001 From: Arthur Pastel Date: Thu, 19 Sep 2024 19:31:14 +0200 Subject: [PATCH 3/4] feat: send the semver version to cospeed instead of the PEP440 one --- src/pytest_codspeed/__init__.py | 2 +- src/pytest_codspeed/instruments/valgrind/__init__.py | 4 ++-- src/pytest_codspeed/utils.py | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/pytest_codspeed/__init__.py b/src/pytest_codspeed/__init__.py index 155891d..9de207f 100644 --- a/src/pytest_codspeed/__init__.py +++ b/src/pytest_codspeed/__init__.py @@ -4,4 +4,4 @@ from .plugin import BenchmarkFixture -__all__ = ["BenchmarkFixture", "__version__"] +__all__ = ["BenchmarkFixture", "__version__", "__semver_version__"] diff --git a/src/pytest_codspeed/instruments/valgrind/__init__.py b/src/pytest_codspeed/instruments/valgrind/__init__.py index b8d1974..9b80092 100644 --- a/src/pytest_codspeed/instruments/valgrind/__init__.py +++ b/src/pytest_codspeed/instruments/valgrind/__init__.py @@ -4,7 +4,7 @@ import sys from typing import TYPE_CHECKING -from pytest_codspeed import __version__ +from pytest_codspeed import __semver_version__ from pytest_codspeed.instruments import Instrument from pytest_codspeed.instruments.valgrind._wrapper import get_lib @@ -30,7 +30,7 @@ def __init__(self, config: CodSpeedConfig) -> None: if self.should_measure: self.lib = get_lib() self.lib.dump_stats_at( - f"Metadata: pytest-codspeed {__version__}".encode("ascii") + f"Metadata: pytest-codspeed {__semver_version__}".encode("ascii") ) if SUPPORTS_PERF_TRAMPOLINE: sys.activate_stack_trampoline("perf") # type: ignore diff --git a/src/pytest_codspeed/utils.py b/src/pytest_codspeed/utils.py index f353075..221505b 100644 --- a/src/pytest_codspeed/utils.py +++ b/src/pytest_codspeed/utils.py @@ -5,7 +5,7 @@ import sysconfig from pathlib import Path -from pytest_codspeed import __version__ +from pytest_codspeed import __semver_version__ if sys.version_info < (3, 10): import importlib_metadata as importlib_metadata @@ -51,7 +51,7 @@ def get_environment_metadata() -> dict[str, dict]: return { "creator": { "name": "pytest-codspeed", - "version": __version__, + "version": __semver_version__, "pid": os.getpid(), }, "python": { From 7f04bd7e3cc57349407c4e95f08d88f192562d31 Mon Sep 17 00:00:00 2001 From: Arthur Pastel Date: Fri, 20 Sep 2024 10:36:50 +0200 Subject: [PATCH 4/4] =?UTF-8?q?Release=20v3.0.0b1=20=F0=9F=9A=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pytest_codspeed/__init__.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/pytest_codspeed/__init__.py b/src/pytest_codspeed/__init__.py index 9de207f..044902f 100644 --- a/src/pytest_codspeed/__init__.py +++ b/src/pytest_codspeed/__init__.py @@ -1,6 +1,6 @@ -__version__ = "3.0.0b0" +__version__ = "3.0.0b1" # We also have the semver version since __version__ is not semver compliant -__semver_version__ = "3.0.0-b0" +__semver_version__ = "3.0.0-b1" from .plugin import BenchmarkFixture