Skip to content

Refactoring - #3

Merged
legraina merged 15 commits into
mainfrom
cleaning
Jun 5, 2026
Merged

Refactoring#3
legraina merged 15 commits into
mainfrom
cleaning

Conversation

@legraina

@legraina legraina commented Jun 3, 2026

Copy link
Copy Markdown
Collaborator

Reopens the refactoring work from #2, which GitHub auto-closed when the `cleaning` branch history was rewritten to move the NYC-DARP and Riley benchmark files into Git LFS.

The history of `main` and `cleaning` has been reconciled (they now share a common ancestor again), so this PR carries the same changes:

  • Refactor the structure and install git-lfs
  • Add MIT License
  • Track `data/NYC-DARP-Benchmark/` and `data/Riley_Benchmark/` in Git LFS

Supersedes #2.

🤖 Generated with Claude Code

TODO:

  • Installed git-lfs
  • Refactor the structure
  • Add an MIT licence
  • Update the doc
  • Test the current code
  • Add a toy example to test
  • Add some unit testing
  • Add a CI

Copilot AI review requested due to automatic review settings June 3, 2026 12:32

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Note

Copilot was unable to run its full agentic suite in this review.

Reopens prior refactoring work (superseding #2) related to repository restructuring and moving benchmark datasets to Git LFS, but the visible diffs show benchmark instance text files being truncated to empty files.

Changes:

  • Removes the header/metadata contents from many INSTANCE_*.txt benchmark files (resulting in empty files in the diff).
  • (Per PR description) intends to track NYC-DARP and Riley benchmark datasets in Git LFS and reconcile branch history.

Reviewed changes

Copilot reviewed 89 out of 2386 changed files in this pull request and generated no comments.

Show a summary per file
File Description
DARP_IPS/NYC-DARP-Benchmark/Instances_4h-11/20160316_11-240m/INSTANCE_20160316_11-240m.txt Removes all file contents (instance header); file appears empty after change
DARP_IPS/NYC-DARP-Benchmark/Instances_4h-11/20160225_11-240m/INSTANCE_20160225_11-240m.txt Removes all file contents (instance header); file appears empty after change
DARP_IPS/NYC-DARP-Benchmark/Instances_4h-11/20160222_11-240m/INSTANCE_20160222_11-240m.txt Removes all file contents (instance header); file appears empty after change
DARP_IPS/NYC-DARP-Benchmark/Instances_4h-11/20160129_11-240m/INSTANCE_20160129_11-240m.txt Removes all file contents (instance header); file appears empty after change
DARP_IPS/NYC-DARP-Benchmark/Instances_4h-11/20160109_11-240m/INSTANCE_20160109_11-240m.txt Removes all file contents (instance header); file appears empty after change
DARP_IPS/NYC-DARP-Benchmark/Instances_4h-11/20151230_11-240m/INSTANCE_20151230_11-240m.txt Removes all file contents (instance header); file appears empty after change
DARP_IPS/NYC-DARP-Benchmark/Instances_4h-11/20151211_11-240m/INSTANCE_20151211_11-240m.txt Removes all file contents (instance header); file appears empty after change
DARP_IPS/NYC-DARP-Benchmark/Instances_4h-11/20151130_11-240m/INSTANCE_20151130_11-240m.txt Removes all file contents (instance header); file appears empty after change
DARP_IPS/NYC-DARP-Benchmark/Instances_4h-11/20151110_11-240m/INSTANCE_20151110_11-240m.txt Removes all file contents (instance header); file appears empty after change
DARP_IPS/NYC-DARP-Benchmark/Instances_4h-11/20151025_11-240m/INSTANCE_20151025_11-240m.txt Removes all file contents (instance header); file appears empty after change
DARP_IPS/NYC-DARP-Benchmark/Instances_4h-11/20151008_11-240m/INSTANCE_20151008_11-240m.txt Removes all file contents (instance header); file appears empty after change
DARP_IPS/NYC-DARP-Benchmark/Instances_4h-11/20150926_11-240m/INSTANCE_20150926_11-240m.txt Removes all file contents (instance header); file appears empty after change
DARP_IPS/NYC-DARP-Benchmark/Instances_4h-11/20150917_11-240m/INSTANCE_20150917_11-240m.txt Removes all file contents (instance header); file appears empty after change
DARP_IPS/NYC-DARP-Benchmark/Instances_4h-11/20150828_11-240m/INSTANCE_20150828_11-240m.txt Removes all file contents (instance header); file appears empty after change
DARP_IPS/NYC-DARP-Benchmark/Instances_4h-11/20150804_11-240m/INSTANCE_20150804_11-240m.txt Removes all file contents (instance header); file appears empty after change
DARP_IPS/NYC-DARP-Benchmark/Instances_4h-11/20150715_11-240m/INSTANCE_20150715_11-240m.txt Removes all file contents (instance header); file appears empty after change
DARP_IPS/NYC-DARP-Benchmark/Instances_4h-11/20150706_11-240m/INSTANCE_20150706_11-240m.txt Removes all file contents (instance header); file appears empty after change
DARP_IPS/NYC-DARP-Benchmark/Instances_2h-7/20160628_07-120m/INSTANCE_20160628_07-120m.txt Removes all file contents (instance header); file appears empty after change
DARP_IPS/NYC-DARP-Benchmark/Instances_2h-7/20160613_07-120m/INSTANCE_20160613_07-120m.txt Removes all file contents (instance header); file appears empty after change
DARP_IPS/NYC-DARP-Benchmark/Instances_2h-7/20160521_07-120m/INSTANCE_20160521_07-120m.txt Removes all file contents (instance header); file appears empty after change
DARP_IPS/NYC-DARP-Benchmark/Instances_2h-7/20160512_07-120m/INSTANCE_20160512_07-120m.txt Removes all file contents (instance header); file appears empty after change
DARP_IPS/NYC-DARP-Benchmark/Instances_2h-7/20160427_07-120m/INSTANCE_20160427_07-120m.txt Removes all file contents (instance header); file appears empty after change
DARP_IPS/NYC-DARP-Benchmark/Instances_2h-7/20160401_07-120m/INSTANCE_20160401_07-120m.txt Removes all file contents (instance header); file appears empty after change
DARP_IPS/NYC-DARP-Benchmark/Instances_2h-7/20160329_07-120m/INSTANCE_20160329_07-120m.txt Removes all file contents (instance header); file appears empty after change
DARP_IPS/NYC-DARP-Benchmark/Instances_2h-7/20160316_07-120m/INSTANCE_20160316_07-120m.txt Removes all file contents (instance header); file appears empty after change
DARP_IPS/NYC-DARP-Benchmark/Instances_2h-7/20160225_07-120m/INSTANCE_20160225_07-120m.txt Removes all file contents (instance header); file appears empty after change
DARP_IPS/NYC-DARP-Benchmark/Instances_2h-7/20160222_07-120m/INSTANCE_20160222_07-120m.txt Removes all file contents (instance header); file appears empty after change
DARP_IPS/NYC-DARP-Benchmark/Instances_2h-7/20160129_07-120m/INSTANCE_20160129_07-120m.txt Removes all file contents (instance header); file appears empty after change
DARP_IPS/NYC-DARP-Benchmark/Instances_2h-7/20160109_07-120m/INSTANCE_20160109_07-120m.txt Removes all file contents (instance header); file appears empty after change
DARP_IPS/NYC-DARP-Benchmark/Instances_2h-7/20151230_07-120m/INSTANCE_20151230_07-120m.txt Removes all file contents (instance header); file appears empty after change
DARP_IPS/NYC-DARP-Benchmark/Instances_2h-7/20151211_07-120m/INSTANCE_20151211_07-120m.txt Removes all file contents (instance header); file appears empty after change
DARP_IPS/NYC-DARP-Benchmark/Instances_2h-7/20151130_07-120m/INSTANCE_20151130_07-120m.txt Removes all file contents (instance header); file appears empty after change
DARP_IPS/NYC-DARP-Benchmark/Instances_2h-7/20151110_07-120m/INSTANCE_20151110_07-120m.txt Removes all file contents (instance header); file appears empty after change
DARP_IPS/NYC-DARP-Benchmark/Instances_2h-7/20151025_07-120m/INSTANCE_20151025_07-120m.txt Removes all file contents (instance header); file appears empty after change
DARP_IPS/NYC-DARP-Benchmark/Instances_2h-7/20151008_07-120m/INSTANCE_20151008_07-120m.txt Removes all file contents (instance header); file appears empty after change
DARP_IPS/NYC-DARP-Benchmark/Instances_2h-7/20150926_07-120m/INSTANCE_20150926_07-120m.txt Removes all file contents (instance header); file appears empty after change
DARP_IPS/NYC-DARP-Benchmark/Instances_2h-7/20150917_07-120m/INSTANCE_20150917_07-120m.txt Removes all file contents (instance header); file appears empty after change
DARP_IPS/NYC-DARP-Benchmark/Instances_2h-7/20150828_07-120m/INSTANCE_20150828_07-120m.txt Removes all file contents (instance header); file appears empty after change
DARP_IPS/NYC-DARP-Benchmark/Instances_2h-7/20150804_07-120m/INSTANCE_20150804_07-120m.txt Removes all file contents (instance header); file appears empty after change
DARP_IPS/NYC-DARP-Benchmark/Instances_2h-7/20150715_07-120m/INSTANCE_20150715_07-120m.txt Removes all file contents (instance header); file appears empty after change
DARP_IPS/NYC-DARP-Benchmark/Instances_2h-7/20150706_07-120m/INSTANCE_20150706_07-120m.txt Removes all file contents (instance header); file appears empty after change
DARP_IPS/NYC-DARP-Benchmark/Instances_2h-11/20160628_11-120m/INSTANCE_20160628_11-120m.txt Removes all file contents (instance header); file appears empty after change
DARP_IPS/NYC-DARP-Benchmark/Instances_2h-11/20160613_11-120m/INSTANCE_20160613_11-120m.txt Removes all file contents (instance header); file appears empty after change
DARP_IPS/NYC-DARP-Benchmark/Instances_2h-11/20160521_11-120m/INSTANCE_20160521_11-120m.txt Removes all file contents (instance header); file appears empty after change
DARP_IPS/NYC-DARP-Benchmark/Instances_2h-11/20160512_11-120m/INSTANCE_20160512_11-120m.txt Removes all file contents (instance header); file appears empty after change
DARP_IPS/NYC-DARP-Benchmark/Instances_2h-11/20160427_11-120m/INSTANCE_20160427_11-120m.txt Removes all file contents (instance header); file appears empty after change
DARP_IPS/NYC-DARP-Benchmark/Instances_2h-11/20160401_11-120m/INSTANCE_20160401_11-120m.txt Removes all file contents (instance header); file appears empty after change
DARP_IPS/NYC-DARP-Benchmark/Instances_2h-11/20160329_11-120m/INSTANCE_20160329_11-120m.txt Removes all file contents (instance header); file appears empty after change
DARP_IPS/NYC-DARP-Benchmark/Instances_2h-11/20160316_11-120m/INSTANCE_20160316_11-120m.txt Removes all file contents (instance header); file appears empty after change
DARP_IPS/NYC-DARP-Benchmark/Instances_2h-11/20160225_11-120m/INSTANCE_20160225_11-120m.txt Removes all file contents (instance header); file appears empty after change
DARP_IPS/NYC-DARP-Benchmark/Instances_2h-11/20160222_11-120m/INSTANCE_20160222_11-120m.txt Removes all file contents (instance header); file appears empty after change
DARP_IPS/NYC-DARP-Benchmark/Instances_2h-11/20160129_11-120m/INSTANCE_20160129_11-120m.txt Removes all file contents (instance header); file appears empty after change
DARP_IPS/NYC-DARP-Benchmark/Instances_2h-11/20160109_11-120m/INSTANCE_20160109_11-120m.txt Removes all file contents (instance header); file appears empty after change
DARP_IPS/NYC-DARP-Benchmark/Instances_2h-11/20151230_11-120m/INSTANCE_20151230_11-120m.txt Removes all file contents (instance header); file appears empty after change
DARP_IPS/NYC-DARP-Benchmark/Instances_2h-11/20151211_11-120m/INSTANCE_20151211_11-120m.txt Removes all file contents (instance header); file appears empty after change
DARP_IPS/NYC-DARP-Benchmark/Instances_2h-11/20151130_11-120m/INSTANCE_20151130_11-120m.txt Removes all file contents (instance header); file appears empty after change
DARP_IPS/NYC-DARP-Benchmark/Instances_2h-11/20151110_11-120m/INSTANCE_20151110_11-120m.txt Removes all file contents (instance header); file appears empty after change
DARP_IPS/NYC-DARP-Benchmark/Instances_2h-11/20151025_11-120m/INSTANCE_20151025_11-120m.txt Removes all file contents (instance header); file appears empty after change
DARP_IPS/NYC-DARP-Benchmark/Instances_2h-11/20151008_11-120m/INSTANCE_20151008_11-120m.txt Removes all file contents (instance header); file appears empty after change
DARP_IPS/NYC-DARP-Benchmark/Instances_2h-11/20150926_11-120m/INSTANCE_20150926_11-120m.txt Removes all file contents (instance header); file appears empty after change
DARP_IPS/NYC-DARP-Benchmark/Instances_2h-11/20150917_11-120m/INSTANCE_20150917_11-120m.txt Removes all file contents (instance header); file appears empty after change
DARP_IPS/NYC-DARP-Benchmark/Instances_2h-11/20150828_11-120m/INSTANCE_20150828_11-120m.txt Removes all file contents (instance header); file appears empty after change
DARP_IPS/NYC-DARP-Benchmark/Instances_2h-11/20150804_11-120m/INSTANCE_20150804_11-120m.txt Removes all file contents (instance header); file appears empty after change
DARP_IPS/NYC-DARP-Benchmark/Instances_2h-11/20150715_11-120m/INSTANCE_20150715_11-120m.txt Removes all file contents (instance header); file appears empty after change
DARP_IPS/NYC-DARP-Benchmark/Instances_2h-11/20150706_11-120m/INSTANCE_20150706_11-120m.txt Removes all file contents (instance header); file appears empty after change
DARP_IPS/NYC-DARP-Benchmark/Instances_16h-7/20160628_07-959m/INSTANCE_20160628_07-959m.txt Removes all file contents (instance header); file appears empty after change
DARP_IPS/NYC-DARP-Benchmark/Instances_16h-7/20160613_07-959m/INSTANCE_20160613_07-959m.txt Removes all file contents (instance header); file appears empty after change
DARP_IPS/NYC-DARP-Benchmark/Instances_16h-7/20160521_07-959m/INSTANCE_20160521_07-959m.txt Removes all file contents (instance header); file appears empty after change
DARP_IPS/NYC-DARP-Benchmark/Instances_16h-7/20160512_07-959m/INSTANCE_20160512_07-959m.txt Removes all file contents (instance header); file appears empty after change
DARP_IPS/NYC-DARP-Benchmark/Instances_16h-7/20160427_07-959m/INSTANCE_20160427_07-959m.txt Removes all file contents (instance header); file appears empty after change
DARP_IPS/NYC-DARP-Benchmark/Instances_16h-7/20160401_07-959m/INSTANCE_20160401_07-959m.txt Removes all file contents (instance header); file appears empty after change
DARP_IPS/NYC-DARP-Benchmark/Instances_16h-7/20160329_07-959m/INSTANCE_20160329_07-959m.txt Removes all file contents (instance header); file appears empty after change
DARP_IPS/NYC-DARP-Benchmark/Instances_16h-7/20160316_07-959m/INSTANCE_20160316_07-959m.txt Removes all file contents (instance header); file appears empty after change
DARP_IPS/NYC-DARP-Benchmark/Instances_16h-7/20160225_07-959m/INSTANCE_20160225_07-959m.txt Removes all file contents (instance header); file appears empty after change
DARP_IPS/NYC-DARP-Benchmark/Instances_16h-7/20160222_07-959m/INSTANCE_20160222_07-959m.txt Removes all file contents (instance header); file appears empty after change
DARP_IPS/NYC-DARP-Benchmark/Instances_16h-7/20160129_07-959m/INSTANCE_20160129_07-959m.txt Removes all file contents (instance header); file appears empty after change
DARP_IPS/NYC-DARP-Benchmark/Instances_16h-7/20160109_07-959m/INSTANCE_20160109_07-959m.txt Removes all file contents (instance header); file appears empty after change
DARP_IPS/NYC-DARP-Benchmark/Instances_16h-7/20151230_07-959m/INSTANCE_20151230_07-959m.txt Removes all file contents (instance header); file appears empty after change
DARP_IPS/NYC-DARP-Benchmark/Instances_16h-7/20151211_07-959m/INSTANCE_20151211_07-959m.txt Removes all file contents (instance header); file appears empty after change
DARP_IPS/NYC-DARP-Benchmark/Instances_16h-7/20151130_07-959m/INSTANCE_20151130_07-959m.txt Removes all file contents (instance header); file appears empty after change
DARP_IPS/NYC-DARP-Benchmark/Instances_16h-7/20151110_07-959m/INSTANCE_20151110_07-959m.txt Removes all file contents (instance header); file appears empty after change
DARP_IPS/NYC-DARP-Benchmark/Instances_16h-7/20151025_07-959m/INSTANCE_20151025_07-959m.txt Removes all file contents (instance header); file appears empty after change
DARP_IPS/NYC-DARP-Benchmark/Instances_16h-7/20151008_07-959m/INSTANCE_20151008_07-959m.txt Removes all file contents (instance header); file appears empty after change
DARP_IPS/NYC-DARP-Benchmark/Instances_16h-7/20150926_07-959m/INSTANCE_20150926_07-959m.txt Removes all file contents (instance header); file appears empty after change
DARP_IPS/NYC-DARP-Benchmark/Instances_16h-7/20150917_07-959m/INSTANCE_20150917_07-959m.txt Removes all file contents (instance header); file appears empty after change
DARP_IPS/NYC-DARP-Benchmark/Instances_16h-7/20150828_07-959m/INSTANCE_20150828_07-959m.txt Removes all file contents (instance header); file appears empty after change
DARP_IPS/NYC-DARP-Benchmark/Instances_16h-7/20150804_07-959m/INSTANCE_20150804_07-959m.txt Removes all file contents (instance header); file appears empty after change
DARP_IPS/NYC-DARP-Benchmark/Instances_16h-7/20150715_07-959m/INSTANCE_20150715_07-959m.txt Removes all file contents (instance header); file appears empty after change
DARP_IPS/NYC-DARP-Benchmark/Instances_16h-7/20150706_07-959m/INSTANCE_20150706_07-959m.txt Removes all file contents (instance header); file appears empty after change
Comments suppressed due to low confidence (2)

DARP_IPS/NYC-DARP-Benchmark/Instances_4h-11/20160316_11-240m/INSTANCE_20160316_11-240m.txt:1

  • This change removes all contents from the instance file (leaving it empty in the resulting diff). If the intent is to migrate these large benchmark files to Git LFS, the committed Git object should typically become a Git LFS pointer file (not empty). Please re-check the LFS migration steps: ensure the correct paths are tracked via .gitattributes, re-add the files so Git writes LFS pointers, and confirm via git lfs ls-files that these instances are stored in LFS. If the intent is to remove these from the repo, delete the files rather than leaving empty placeholders.
    DARP_IPS/NYC-DARP-Benchmark/Instances_4h-11/20160316_11-240m/INSTANCE_20160316_11-240m.txt:1
  • The PR description says Git LFS tracking is being applied to data/NYC-DARP-Benchmark/** and data/Riley_Benchmark/**, but the changed files shown here are under DARP_IPS/NYC-DARP-Benchmark/**. Please align either the directory layout (move/rename into the described data/... location) or update the PR description and LFS tracking patterns so they match the actual paths being modified.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

legraina and others added 12 commits June 3, 2026 13:40
The previous refactor renamed DARP_IPS/ -> cpp/ and DARP_Python/ -> python/,
moved benchmarks to a Git LFS-tracked data/ folder, relocated
computational_scripts/ to the repo root, and added an MIT LICENSE.

- Update all READMEs to the new folder names, links, and Git LFS instructions
- Replace "no license" notes with the MIT license statement
- Fix now-broken relative paths in experiment configs (data_dir -> ../data/...)
  and scripts (EXE -> ../cpp/bin/realtime_DARP)
- Correct paths in the reproducibility guide (../cpp/bin, ../data, ../Outputs)
- Rename solver/pipeline README headings to match the new folders
- Consolidate scattered .idea ignore rules into **/.idea/ and ignore Outputs/

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Add a top-level CMakeLists.txt that forwards to cpp/ so IDEs (CLion) and
  root-level `cmake -S . -B build` invocations pick up the solver build
- Make SOLVER a cache variable so -DSOLVER=CPLEX/GUROBI is actually honored
  (previously a plain set() silently overrode the command-line value)
- Update cpp build docs to use -DSOLVER=... and note building from the root;
  remove the redundant clone step
- Document installing Eigen3/Boost and CMake's Eigen search order
- Consolidate .idea ignore rules and ignore root cmake-build-*/ and Outputs/

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Running the solver with no command-line arguments now solves a tiny,
self-contained instance under data/ToyExample (B-CG / RT_CG workflow),
making it easy to smoke-test a build without the full benchmarks.

- data/ToyExample: 4x3 grid of 12 stops, 4 zones, 3 vehicles, 8 requests,
  in the same text format as the real benchmarks, plus gen_toy.py and a README
- ConfigParser: load the toy defaults when launched with no args; locate
  data/ToyExample relative to the working directory (root, cpp/, or build/bin)
- ReadWrite::readZones: fix an EOF over-read that inserted a zone with an
  out-of-range center and segfaulted in sortZones; use the file >> ... idiom
- Ignore data/ToyExample/runs output; document the no-arg run in the READMEs

Verified: builds clean and serves all 8 requests (0 rejected) from the repo
root, cpp/, and cpp/bin/.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…num names

Improve the command-line interface and decouple the fleet definition from the
vehicle file name:

- --num-vehicles, --vehicle-capacity, --vehicle-folder and --initial-state are
  now optional with sensible defaults (folder "vehicles", initial state 0)
- When --num-vehicles is omitted, read the fleet straight from
  <vehicle-folder>/vehicles.txt: the row count is the fleet size and the columns
  hold the capacities, so neither is inferred from the file name. With
  --num-vehicles N the benchmark file vehicles_<N>_4.txt is still selected.
- --vehicle-capacity overrides the per-vehicle capacity only when provided
- --main-algo and --sol-mode accept an enum name (RT_CG, DYNAMIC, ...) in
  addition to the integer code, kept backward compatible
- Rename the toy vehicle file to vehicles.txt; document the new defaults and
  the meaning of --initial-state (fresh / warm / resume) in --help and READMEs

Add ReadWrite::countVehicles and InputPaths::setVehicleFiles to support the
above. Verified: no-arg toy and explicit runs serve all 8 requests.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
printConfig() runs right after argument parsing, before main resolves the
vehicle file, so vehicleFileName_ was still empty (and printed blank) whenever
--num-vehicles was omitted. Display "vehicles (fleet read from file)" in that
case instead of an empty value.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Introduce a small dependency-free test harness wired into CTest:

- unit_tests: C++ unit/regression tests linking only the solver-free utilities
  and data libraries (no Gurobi/CPLEX license needed):
  * ConfigParser: enum-name and numeric --main-algo/--sol-mode parsing,
    optional-argument defaults, and validation
  * ReadWrite::countVehicles row counting, and a regression test for the
    readZones end-of-file over-read that used to crash sortZones
- toy_regression: end-to-end Python check that the bundled toy example still
  serves all 8 requests with 3 vehicles and none rejected; registered only when
  a solver backend is enabled

Wire BUILD_TESTING into cpp/CMakeLists.txt, enable_testing() at the root, and
document the suite in the C++ README. Run with: ctest --test-dir build.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Build and test the project without any commercial solver, on Linux, macOS, and
Windows:

- Add SOLVER=NONE so CMake builds the solver-free utilities/data libraries and
  the unit tests with no Gurobi/CPLEX find logic and no license
- Replace the POSIX mkdir/stat/S_ISDIR calls in ConfigParser and InputPaths with
  a portable std::filesystem helper (PlatformCompat.h) so the libraries compile
  on Windows too; behavior is preserved
- Add .github/workflows/build-and-test.yml: matrix over ubuntu/macos/windows,
  installs Eigen + header-only Boost, configures with -DSOLVER=NONE, builds the
  unit_tests target and runs ctest
- Document the no-solver build and CI in the C++ README

Verified locally: the normal Gurobi build with the full ctest suite still passes,
and a fresh SOLVER=NONE build runs the unit tests green.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The vcpkg toolchain path was passed to CMake literally because the unquoted
$env:VCPKG_INSTALLATION_ROOT was not expanded by the shell, so configure failed
with "Could not find toolchain file". Force shell: pwsh and double-quote the
-DCMAKE_TOOLCHAIN_FILE argument so the environment variable is interpolated.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The MainAlgorithm enum was reduced to 5 values but mainAlgorithmNames was still
declared std::array<const char*, 7> with only 5 initializers, leaving two null
entries. parseEnumArg scanned all entries for an unknown value and called strlen
on a null pointer, crashing the unit tests.

Correct the array size to 5, and harden parseEnumArg to skip null entries so a
future size/initializer mismatch cannot crash.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@legraina
legraina merged commit acfa809 into main Jun 5, 2026
3 checks passed
@legraina
legraina deleted the cleaning branch June 5, 2026 15:38
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants