Skip to content

Commit 70d648f

Browse files
tests
1 parent f400432 commit 70d648f

File tree

4 files changed

+115
-34
lines changed

4 files changed

+115
-34
lines changed
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
[tool.codeflash]
2+
# All paths are relative to this pyproject.toml's directory.
3+
module-root = "src/app"
4+
tests-root = "tests"
5+
test-framework = "pytest"
6+
ignore-paths = []
7+
disable-telemetry = true
8+
formatter-cmds = ["disabled"]
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
def sorter(arr):
2+
print("codeflash stdout: Sorting list")
3+
for i in range(len(arr)):
4+
for j in range(len(arr) - 1):
5+
if arr[j] > arr[j + 1]:
6+
temp = arr[j]
7+
arr[j] = arr[j + 1]
8+
arr[j + 1] = temp
9+
print(f"result: {arr}")
10+
return arr

codeflash/optimization/optimizer.py

Lines changed: 32 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -451,43 +451,41 @@ def mirror_paths_for_worktree_mode(self, worktree_dir: Path) -> None:
451451
original_test_cfg = copy.deepcopy(self.test_cfg)
452452
self.original_args_and_test_cfg = (original_args, original_test_cfg)
453453

454-
original_module_root = original_args.module_root
455454
original_git_root = git_root_dir()
456455

457-
# mutate project_root
458-
relative_project_root = original_args.project_root.relative_to(original_git_root)
459-
# this will be the same as the original project root but in the worktree
460-
new_project_root = worktree_dir / relative_project_root
461-
self.args.project_root = new_project_root
462-
self.test_cfg.project_root_path = new_project_root
463-
464-
# mutate module_root
465-
relative_module_root = original_module_root.relative_to(original_git_root)
466-
self.args.module_root = worktree_dir / relative_module_root
467-
468-
# mute target file
469-
relative_optimized_file = original_args.file.relative_to(original_git_root) if original_args.file else None
470-
if relative_optimized_file is not None:
471-
self.args.file = worktree_dir / relative_optimized_file
472-
473-
# mutate tests root
474-
relative_tests_root = original_test_cfg.tests_root.relative_to(original_git_root)
475-
new_tests_root = worktree_dir / relative_tests_root
476-
self.args.tests_root = new_tests_root
477-
self.test_cfg.tests_root = new_tests_root
478-
479-
# mutate tests project root
480-
relative_tests_project_root = original_args.test_project_root.relative_to(original_git_root)
481-
self.args.test_project_root = worktree_dir / relative_tests_project_root
482-
self.test_cfg.tests_project_rootdir = worktree_dir / relative_tests_project_root
483-
484-
# mutate benchmarks root
485-
relative_benchmarks_root = (
486-
original_args.benchmarks_root.relative_to(original_git_root) if original_args.benchmarks_root else None
456+
# mirror project_root
457+
self.args.project_root = mirror_path(self.args.project_root, original_git_root, worktree_dir)
458+
self.test_cfg.project_root_path = mirror_path(self.test_cfg.project_root_path, original_git_root, worktree_dir)
459+
460+
# mirror module_root
461+
self.args.module_root = mirror_path(self.args.module_root, original_git_root, worktree_dir)
462+
463+
# mirror target file
464+
if self.args.file:
465+
self.args.file = mirror_path(self.args.file, original_git_root, worktree_dir)
466+
467+
# mirror tests root
468+
self.args.tests_root = mirror_path(self.args.tests_root, original_git_root, worktree_dir)
469+
self.test_cfg.tests_root = mirror_path(self.test_cfg.tests_root, original_git_root, worktree_dir)
470+
471+
# mirror tests project root
472+
self.args.test_project_root = mirror_path(self.args.test_project_root, original_git_root, worktree_dir)
473+
self.test_cfg.tests_project_rootdir = mirror_path(
474+
self.test_cfg.tests_project_rootdir, original_git_root, worktree_dir
487475
)
488-
if relative_benchmarks_root:
489-
self.args.benchmarks_root = worktree_dir / relative_benchmarks_root
490-
self.test_cfg.benchmark_tests_root = worktree_dir / relative_benchmarks_root
476+
477+
# mirror benchmarks root paths
478+
if self.args.benchmarks_root:
479+
self.args.benchmarks_root = mirror_path(self.args.benchmarks_root, original_git_root, worktree_dir)
480+
if self.test_cfg.benchmark_tests_root:
481+
self.test_cfg.benchmark_tests_root = mirror_path(
482+
self.test_cfg.benchmark_tests_root, original_git_root, worktree_dir
483+
)
484+
485+
486+
def mirror_path(path: Path, src_root: Path, dest_root: Path) -> Path:
487+
relative_path = path.relative_to(src_root)
488+
return dest_root / relative_path
491489

492490

493491
def run_with_args(args: Namespace) -> None:

tests/test_worktree.py

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
from argparse import Namespace
2+
from pathlib import Path
3+
4+
import pytest
5+
from codeflash.cli_cmds.cli import process_pyproject_config
6+
from codeflash.optimization.optimizer import Optimizer
7+
8+
9+
def test_mirror_paths_for_worktree_mode(monkeypatch: pytest.MonkeyPatch):
10+
repo_root = Path(__file__).resolve().parent.parent
11+
project_root = repo_root / "code_to_optimize" / "code_directories" / "nested_module_root"
12+
13+
monkeypatch.setattr("codeflash.optimization.optimizer.git_root_dir", lambda: project_root)
14+
15+
args = Namespace()
16+
args.benchmark = False
17+
args.benchmarks_root = None
18+
19+
args.config_file = project_root / "pyproject.toml"
20+
args.file = project_root / "src" / "app" / "main.py"
21+
args.worktree = True
22+
23+
new_args = process_pyproject_config(args)
24+
25+
optimizer = Optimizer(new_args)
26+
27+
worktree_dir = repo_root / "worktree"
28+
optimizer.mirror_paths_for_worktree_mode(worktree_dir)
29+
30+
assert optimizer.args.project_root == worktree_dir / "src"
31+
assert optimizer.args.test_project_root == worktree_dir
32+
assert optimizer.args.module_root == worktree_dir / "src" / "app"
33+
assert optimizer.args.tests_root == worktree_dir / "tests"
34+
assert optimizer.args.file == worktree_dir / "src" / "app" / "main.py"
35+
36+
assert optimizer.test_cfg.tests_root == worktree_dir / "tests"
37+
assert optimizer.test_cfg.project_root_path == worktree_dir / "src" # same as project_root
38+
assert optimizer.test_cfg.tests_project_rootdir == worktree_dir # same as test_project_root
39+
40+
# test on our repo
41+
monkeypatch.setattr("codeflash.optimization.optimizer.git_root_dir", lambda: repo_root)
42+
args = Namespace()
43+
args.benchmark = False
44+
args.benchmarks_root = None
45+
46+
args.config_file = repo_root / "pyproject.toml"
47+
args.file = repo_root / "codeflash/optimization/optimizer.py"
48+
args.worktree = True
49+
50+
new_args = process_pyproject_config(args)
51+
52+
optimizer = Optimizer(new_args)
53+
54+
worktree_dir = repo_root / "worktree"
55+
optimizer.mirror_paths_for_worktree_mode(worktree_dir)
56+
57+
assert optimizer.args.project_root == worktree_dir
58+
assert optimizer.args.test_project_root == worktree_dir
59+
assert optimizer.args.module_root == worktree_dir / "codeflash"
60+
assert optimizer.args.tests_root == worktree_dir / "tests"
61+
assert optimizer.args.file == worktree_dir / "codeflash/optimization/optimizer.py"
62+
63+
assert optimizer.test_cfg.tests_root == worktree_dir / "tests"
64+
assert optimizer.test_cfg.project_root_path == worktree_dir # same as project_root
65+
assert optimizer.test_cfg.tests_project_rootdir == worktree_dir # same as test_project_root

0 commit comments

Comments
 (0)