<feed xmlns='http://www.w3.org/2005/Atom'>
<title>catch3, branch feature/native-property-engine</title>
<subtitle>Progmasoft Catch3: an independently maintained C++17 test framework with a parallel runner, property checks, snapshots and structured results.</subtitle>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/catch3/'/>
<entry>
<title>Merge branch 'devel' into feature/native-property-engine</title>
<updated>2026-10-23T03:08:27+00:00</updated>
<author>
<name>Leitwolf</name>
</author>
<published>2026-10-23T03:08:27+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/catch3/commit/?id=59d200efe0d6a0645e2ae508cccb43affe874500'/>
<id>59d200efe0d6a0645e2ae508cccb43affe874500</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Merge pull request #14 from Progmasoft/build/rules-swift-windows</title>
<updated>2026-10-23T03:08:01+00:00</updated>
<author>
<name>Leitwolf</name>
</author>
<published>2026-10-23T03:08:01+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/catch3/commit/?id=976522bf2f4421e058e13e2b8f8fb842546c2127'/>
<id>976522bf2f4421e058e13e2b8f8fb842546c2127</id>
<content type='text'>
Pin rules_swift 3.4.2 so Bazel works on Windows hosts with Swift</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Pin rules_swift 3.4.2 so Bazel works on Windows hosts with Swift</pre>
</div>
</content>
</entry>
<entry>
<title>Draw tuples without capturing a pack in a nested lambda</title>
<updated>2026-10-22T23:33:21+00:00</updated>
<author>
<name>Leitwolf11</name>
</author>
<published>2026-10-22T23:33:21+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/catch3/commit/?id=c7e625419e699f139c15ae190b0169d93768abe7'/>
<id>c7e625419e699f139c15ae190b0169d93768abe7</id>
<content type='text'>
MSVC rejected Gen::Tuples with C3493: the strategies were captured as
a parameter pack and used inside a nested std::apply lambda. The
strategies are now held as one std::tuple and drawn by
Detail::DrawTuple over an index sequence; the comma fold still draws
them strictly left to right, so choice sequences do not change.

Verified: ProgmasoftSelfTest passes with MSVC 19.51 (cl) and with
clang-cl 23, 57 test cases and 75,461 assertions each. The macOS and
CodeQL failures of the previous run were runners that never started.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
MSVC rejected Gen::Tuples with C3493: the strategies were captured as
a parameter pack and used inside a nested std::apply lambda. The
strategies are now held as one std::tuple and drawn by
Detail::DrawTuple over an index sequence; the comma fold still draws
them strictly left to right, so choice sequences do not change.

Verified: ProgmasoftSelfTest passes with MSVC 19.51 (cl) and with
clang-cl 23, 57 test cases and 75,461 assertions each. The macOS and
CodeQL failures of the previous run were runners that never started.
</pre>
</div>
</content>
</entry>
<entry>
<title>Pin rules_swift 3.4.2 so Bazel works on Windows hosts with Swift</title>
<updated>2026-10-22T23:22:49+00:00</updated>
<author>
<name>Leitwolf11</name>
</author>
<published>2026-10-22T23:22:49+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/catch3/commit/?id=82521713785fa46135c0c143e5cfb1715c210b57'/>
<id>82521713785fa46135c0c143e5cfb1715c210b57</id>
<content type='text'>
rules_swift reaches the module graph through protobuf and rules_apple,
resolved to 3.1.2. Its Windows autoconfiguration runs whenever
swiftc.exe is on PATH and, up to 3.4.1, writes a toolchain that
indexes APPLE_PLATFORMS_CONSTRAINTS with the undefined name arch, so
every Bazel build on such a host failed in analysis with "name 'arch'
is not defined". The hosted runners have no Swift, which is why CI
never saw it.

A single_version_override selects 3.4.2, the first fixed release with
the same compatibility level. It needs protobuf 29 and apple_support
1.24.2, both already satisfied by the graph (protobuf stays at 33.4);
nlohmann_json, only used by rules_swift's own tools, moves to
3.12.0.bcr.1 in the lockfile.

Verified on Windows with Swift 6.4.1 on PATH: bazel test
//tests/Progmasoft:property_tests passes, where it failed before.

Co-Authored-By: Claude Opus 5.5 &lt;noreply@anthropic.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
rules_swift reaches the module graph through protobuf and rules_apple,
resolved to 3.1.2. Its Windows autoconfiguration runs whenever
swiftc.exe is on PATH and, up to 3.4.1, writes a toolchain that
indexes APPLE_PLATFORMS_CONSTRAINTS with the undefined name arch, so
every Bazel build on such a host failed in analysis with "name 'arch'
is not defined". The hosted runners have no Swift, which is why CI
never saw it.

A single_version_override selects 3.4.2, the first fixed release with
the same compatibility level. It needs protobuf 29 and apple_support
1.24.2, both already satisfied by the graph (protobuf stays at 33.4);
nlohmann_json, only used by rules_swift's own tools, moves to
3.12.0.bcr.1 in the lockfile.

Verified on Windows with Swift 6.4.1 on PATH: bazel test
//tests/Progmasoft:property_tests passes, where it failed before.

Co-Authored-By: Claude Opus 5.5 &lt;noreply@anthropic.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>Add a native property-testing engine with choice-sequence shrinking</title>
<updated>2026-10-22T14:39:46+00:00</updated>
<author>
<name>Leitwolf11</name>
</author>
<published>2026-10-22T14:39:46+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/catch3/commit/?id=afac14ac5a62d8d2e7efd2184ad34e16593eddfd'/>
<id>afac14ac5a62d8d2e7efd2184ad34e16593eddfd</id>
<content type='text'>
Catch3's own property engine, independent of RapidCheck, next to the
existing CheckProperty API, which stays unchanged.

Strategies (Progmasoft/Catch3/Strategy/): a Strategy&lt;T&gt; builds a value
from a ChoiceSource, a stream of integer choices where 0 is always the
simplest decision. Gen:: provides Integers, Booleans, Floats (ranges,
NaN and infinities on request, edge values), Characters, Strings,
Utf8Strings, Vectors, UniqueVectors, Sets, Maps, Optionals, Tuples,
Construct, Permutations, Just, SampledFrom, OneOf, Frequency, Lazy and
Recursive; every strategy has Map, Filter and FlatMap.

Shrinking: the engine records the choices of a failing trial and
shrinks them, not the value, with deletion and zeroing of blocks,
binary search per choice with a neighbour step for non-monotone
conditions, sorting and moving value between neighbours. Replaying the
shrunk choices through the same strategies means mapped, filtered,
dependent and stateful inputs all shrink, and a shrunk input still
satisfies its filters.

ForAll([options,] strategy..., body) runs the trials (size rising over
the first half), then a targeted search when the body calls Target,
then checks Cover requirements. A failure report carries the
minimized input, the notes and a replay token (PropertyOptions::Replay)
that runs exactly that input. An example database (DatabasePath or
CATCH3_PROPERTY_DATABASE) replays stored failures first and drops them
once they pass. Bodies return bool, or void with CATCH3_PROPERTY_ASSERT
and CATCH3_PROPERTY_ASSUME, which return instead of throwing; Note,
Classify, Cover and Target record into a per-thread trial record.
CATCH3_CHECK_FOR_ALL and CATCH3_REQUIRE_FOR_ALL report through Catch2
and name the property after the test case for the database.

CheckStateful runs model-based command sequences against a model and
the system under test; preconditions and state-dependent arguments are
replayed during shrinking. Relations.hpp provides Equivalent
(differential), Metamorphic, RoundTrip and Idempotent bodies.

PropertyOptions, PropertyStatus, PropertyFailure and PropertyResult
gain fields and statuses at their ends (kInsufficientCoverage,
kGaveUp); existing designated initializers and reports are unchanged.
The engine's untemplated parts are compiled in ChoiceShrinker.cpp,
PropertyEngine.cpp and Context.cpp, and every build system (Bazel,
CMake, Meson, Xmake, Premake) lists the new files and tests.

Docs: progmasoft-properties.md describes the engine,
progmasoft-roadmap.md the steps that follow (the standalone catch3
runner, mocking, per-test coverage, change-impact selection and
prioritization, mutation testing, guided test generation). The
.clang-format comment names Progmasoft C++ Style instead of Visual X#.

Verified with clang-cl 23 through CMake: ProgmasoftSelfTest passes, 57
test cases and 75,461 assertions, including the shrinking results
(1001 for x &lt;= 1000, { 10 }, { 0, 0, 0 } through FlatMap, 102 through
a filter, { 0, 100 } for two arguments, four push(0) steps for a
queue that drops its fourth element, { 0, 0 } for a sort that loses
duplicates) and the database, replay, coverage and discard behaviour.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Catch3's own property engine, independent of RapidCheck, next to the
existing CheckProperty API, which stays unchanged.

Strategies (Progmasoft/Catch3/Strategy/): a Strategy&lt;T&gt; builds a value
from a ChoiceSource, a stream of integer choices where 0 is always the
simplest decision. Gen:: provides Integers, Booleans, Floats (ranges,
NaN and infinities on request, edge values), Characters, Strings,
Utf8Strings, Vectors, UniqueVectors, Sets, Maps, Optionals, Tuples,
Construct, Permutations, Just, SampledFrom, OneOf, Frequency, Lazy and
Recursive; every strategy has Map, Filter and FlatMap.

Shrinking: the engine records the choices of a failing trial and
shrinks them, not the value, with deletion and zeroing of blocks,
binary search per choice with a neighbour step for non-monotone
conditions, sorting and moving value between neighbours. Replaying the
shrunk choices through the same strategies means mapped, filtered,
dependent and stateful inputs all shrink, and a shrunk input still
satisfies its filters.

ForAll([options,] strategy..., body) runs the trials (size rising over
the first half), then a targeted search when the body calls Target,
then checks Cover requirements. A failure report carries the
minimized input, the notes and a replay token (PropertyOptions::Replay)
that runs exactly that input. An example database (DatabasePath or
CATCH3_PROPERTY_DATABASE) replays stored failures first and drops them
once they pass. Bodies return bool, or void with CATCH3_PROPERTY_ASSERT
and CATCH3_PROPERTY_ASSUME, which return instead of throwing; Note,
Classify, Cover and Target record into a per-thread trial record.
CATCH3_CHECK_FOR_ALL and CATCH3_REQUIRE_FOR_ALL report through Catch2
and name the property after the test case for the database.

CheckStateful runs model-based command sequences against a model and
the system under test; preconditions and state-dependent arguments are
replayed during shrinking. Relations.hpp provides Equivalent
(differential), Metamorphic, RoundTrip and Idempotent bodies.

PropertyOptions, PropertyStatus, PropertyFailure and PropertyResult
gain fields and statuses at their ends (kInsufficientCoverage,
kGaveUp); existing designated initializers and reports are unchanged.
The engine's untemplated parts are compiled in ChoiceShrinker.cpp,
PropertyEngine.cpp and Context.cpp, and every build system (Bazel,
CMake, Meson, Xmake, Premake) lists the new files and tests.

Docs: progmasoft-properties.md describes the engine,
progmasoft-roadmap.md the steps that follow (the standalone catch3
runner, mocking, per-test coverage, change-impact selection and
prioritization, mutation testing, guided test generation). The
.clang-format comment names Progmasoft C++ Style instead of Visual X#.

Verified with clang-cl 23 through CMake: ProgmasoftSelfTest passes, 57
test cases and 75,461 assertions, including the shrinking results
(1001 for x &lt;= 1000, { 10 }, { 0, 0, 0 } through FlatMap, 102 through
a filter, { 0, 100 } for two arguments, four push(0) steps for a
queue that drops its fourth element, { 0, 0 } for a sort that loses
duplicates) and the database, replay, coverage and discard behaviour.
</pre>
</div>
</content>
</entry>
<entry>
<title>Merge pull request #6 from Progmasoft/docs/progmasoft-cpp-style</title>
<updated>2026-10-18T18:05:11+00:00</updated>
<author>
<name>Leitwolf</name>
</author>
<published>2026-10-18T18:05:11+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/catch3/commit/?id=2c23a508c95c557e2ff9ad74b517e5fc65175387'/>
<id>2c23a508c95c557e2ff9ad74b517e5fc65175387</id>
<content type='text'>
Point the Progmasoft-authored code at Progmasoft C++ Style</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Point the Progmasoft-authored code at Progmasoft C++ Style</pre>
</div>
</content>
</entry>
<entry>
<title>Point the Progmasoft-authored code at Progmasoft C++ Style</title>
<updated>2026-10-18T17:05:46+00:00</updated>
<author>
<name>Leitwolf11</name>
</author>
<published>2026-10-18T17:05:46+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/catch3/commit/?id=15a812a9d2e42727ba7af3c2d13731c2e1d9e47b'/>
<id>15a812a9d2e42727ba7af3c2d13731c2e1d9e47b</id>
<content type='text'>
The contributing guide described only the style of the code derived
from Catch2. The code under src/Progmasoft/ and tests/Progmasoft/ is
not derived from it and follows Progmasoft C++ Style
(https://github.com/Progmasoft/progmasoft-cpp), the C++ guide of the
other Progmasoft projects.

A new section under "Writing code" says so, keeps the upstream style
for the Catch2-derived code so upstream changes still apply cleanly,
and records the two deviations the Catch2 API requires: the namespace
Progmasoft::Catch3, and exceptions, which report a failed assertion and
stay inside the library.

Co-Authored-By: Claude Opus 5.5 &lt;noreply@anthropic.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The contributing guide described only the style of the code derived
from Catch2. The code under src/Progmasoft/ and tests/Progmasoft/ is
not derived from it and follows Progmasoft C++ Style
(https://github.com/Progmasoft/progmasoft-cpp), the C++ guide of the
other Progmasoft projects.

A new section under "Writing code" says so, keeps the upstream style
for the Catch2-derived code so upstream changes still apply cleanly,
and records the two deviations the Catch2 API requires: the namespace
Progmasoft::Catch3, and exceptions, which report a failed assertion and
stay inside the library.

Co-Authored-By: Claude Opus 5.5 &lt;noreply@anthropic.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>Merge pull request #5 from Progmasoft/ci/platforms-like-visual-xsharp</title>
<updated>2026-10-11T12:47:14+00:00</updated>
<author>
<name>Leitwolf</name>
</author>
<published>2026-10-11T12:47:14+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/catch3/commit/?id=1b3c5f5b43372b6f7ba3be46dc363ebe0f83224e'/>
<id>1b3c5f5b43372b6f7ba3be46dc363ebe0f83224e</id>
<content type='text'>
Build on the Visual X# platforms; hand version updates to Renovate</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Build on the Visual X# platforms; hand version updates to Renovate</pre>
</div>
</content>
</entry>
<entry>
<title>Merge the Renovate change into this branch</title>
<updated>2026-10-11T07:11:24+00:00</updated>
<author>
<name>Leitwolf11</name>
</author>
<published>2026-10-11T07:11:24+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/catch3/commit/?id=4bb272038a369d01031cbece8536e9baae95fa5b'/>
<id>4bb272038a369d01031cbece8536e9baae95fa5b</id>
<content type='text'>
The pull request that hands version updates to Renovate is folded in
here, so that the two configuration changes are tested and merged
once.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The pull request that hands version updates to Renovate is folded in
here, so that the two configuration changes are tested and merged
once.
</pre>
</div>
</content>
</entry>
<entry>
<title>Merge devel into the platforms branch</title>
<updated>2026-10-11T07:11:18+00:00</updated>
<author>
<name>Leitwolf11</name>
</author>
<published>2026-10-11T07:11:18+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/catch3/commit/?id=e7aa5ff697a27f140136d3643322301c3a811a69'/>
<id>e7aa5ff697a27f140136d3643322301c3a811a69</id>
<content type='text'>
devel gained the Catch2 3.16.1 backport, which dropped the retired
macos-14 runner from the same line this branch changes. The macOS
builds run on macos-15 and macos-26, as this branch has them. The
upstream status names the platforms that are now the gate.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
devel gained the Catch2 3.16.1 backport, which dropped the retired
macos-14 runner from the same line this branch changes. The macOS
builds run on macos-15 and macos-26, as this branch has them. The
upstream status names the platforms that are now the gate.
</pre>
</div>
</content>
</entry>
</feed>
