Repository navigation
Releases: rasuvaeff/property-testing-names
Releases · rasuvaeff/property-testing-names
Release list
v1.0.0
The stability release, in step with rasuvaeff/property-testing-core 1.0.0.
The surface is that of 0.5.2, unchanged: Names::first()/last()/middle()/
full()/person(), Names::locales(), PersonName, Gender, the en and
ru datasets and their shrink order toward the shortest entry. A project on
^0.5 upgrades by widening the constraint to ^1.0.
- Requires
rasuvaeff/property-testing-core^1.0(compatibility policy
§8: a caret on the engine's current major); the dev requirement on
rasuvaeff/property-testing-testois^1.0likewise.
v0.5.2
- Changed. Accepts
rasuvaeff/property-testing-core^0.12(and the
-testoadapter's^0.12) alongside the earlier lines. Nothing in 0.12.0
reaches this package: the release is additive (exhaustive mode, targeted
search, the rule-based façade,Gen::composite(),Gen::withEdgeCases(),
Gen::randomEngine(),Gen::note(),Classify::tabulate(), flaky
replays), and the suite is green against it unchanged.
v0.5.1
- Changed. Accepts
rasuvaeff/property-testing-core^0.11alongside^0.9/^0.10. Nothing in 0.11.0 reaches this package: the release is additive (thePropertyTestingExceptionmarker,AssumptionSkippedpromoted to@api,Gen::stringOf()defaults, docblock reading inGen::forClass()), and the suite is green against it unchanged.
The format is based on Keep a Changelog,
and this project adheres to Semantic Versioning.
v0.5.0
Genderis a string-backed enum (Male = 'male',Female = 'female'), so
json_encode()of aPersonNameyields plain data instead offalse
("Non-backed enums have no default serialization"). Declaration order,
Gen::enum()shrink order and the regression corpus — which keys enum cases
by name — are unchanged. Backing an enum is free before 1.0 and a break
after it (#31).PersonNamerejects a part that is empty aftertrim(), not only'', and
the message names the part:First name must not be empty,Middle name must not be empty,Last name must not be empty. A whitespace-only part used to
be accepted and rendered' . Smith'
(#32).
Consequence:Gen::forClass(PersonName::class)builds parts from
non-empty-string, which includes whitespace-only strings, so a bare call now
fails the run on such a draw or shrink candidate. PassskipInvalid: true, or
— the intended form —Names::person()as the override for the parameter
that holds the name.PersonNameimplementsStringable;(string) $nameisfull().- README, README.ru and
llms.txtsay how aPersonNamecounterexample is
stored in the regression corpus (as a seed entry, which a dataset minor
silently re-points at another person; string arguments survive as values), that
CounterExample::toExamplesCode()throws on it, and that
Gen::forClass(PersonName::class)does not draw from the datasets. AGENTS.mdno longer points at a plan file that does not exist, nor lists
Gen::tuple()among the APIs the package composes (it deliberately nests
flatMap()instead); the Keep-a-Changelog preamble sits under the title
rather than between 0.2.0 and 0.1.3;examples/person-and-display-forms.php
uses a seed whose first block shows both genders.
v0.4.0
static-analysis.ymlpinsactions/cacheat the same SHAbuild.ymluses
(v6.1.0). It sat at v4 — the only place this package's workflows disagreed
with each other and withtemplates/.Names::locales()returns the registered locale codes
(non-empty-list<non-empty-string>). Until now the list was reachable only
by catchingInvalidArgumentExceptionand parsing its message, because
Internal\Locales::registered()is@internal— so a matrix over the
supported locales had to hardcode['en', 'ru']and would silently stop
covering one added later. There is still no registration API: a mutable
registry would make generated data depend on test execution order
(#27).- Accepts
rasuvaeff/property-testing-core^0.10alongside^0.9; the
dev-only Testo adapter constraint widens the same way, so the suite runs
against core 0.10 rather than resolving both back to 0.9. composer rectoris green:Dataset::pool()is an instance method, as
LocallyCalledStaticMethodToNonStaticRectorasks. It had been red since
pool()was introduced in 0.3.1 — which means neither 0.3.1 nor 0.3.2 ran
composer release-checkbefore their tags, becausecomposer builddoes
not run rector.AGENTS.mdno longer restates the core constraint as a version enumeration.
It said^0.4 || ^0.5 || ^0.6 || ^0.7whilecomposer.jsonsaid^0.9—
the third time that copy fell behind, so it now points atcomposer.json
instead.
v0.3.2
- Requires
rasuvaeff/property-testing-core^0.9. The previous constraint
stopped at^0.7, which made the package uninstallable beside either
adapter: a set of generators for property tests has no use without one, and
both had already moved on. The enumerated form (^0.4 || ^0.5 || ...) is
gone with it — it had to be widened by hand on every core release, and was
not, three releases running.^0.9is what both adapters require today, and
moving with them is the whole fix. - Tests run against
rasuvaeff/property-testing-testo^0.9instead of two
minors behind.
v0.3.1
- Drawing without a gender no longer offers an entry that both lists hold
twice.Names::last('en')picked from the 100 surnames listed twice, because
enhands one list to both genders; picking is uniform over the index, so
that was a silent doubling of every surname's weight.
v0.3.0
rufemale patronymics are ordered by length like every other list, so a
counterexample carrying one shrinks toward a shorter name instead of a longer
one. The two patronymic lists still hold the same 40 stems but are no longer
index-aligned — a female form does not grow from the male one by a constant
suffix, so the two invariants could not both hold. This changes the values a
given seed produces forNames::middle(Gender::Female),person()and
full().- Allows
rasuvaeff/property-testing-core^0.7.
v0.2.2
- Keep
PersonNamevalidation compatible with the package Rector rules and
synchronize the documented core compatibility range.
v0.2.1
- Allows
rasuvaeff/property-testing-core^0.6beside^0.4 || ^0.5; the dataset draws areGen::elements()over fixed lists, which 0.6 leaves untouched.