Releases: JohnVerheij/MathAssertions.TUnit
Releases · JohnVerheij/MathAssertions.TUnit
v0.5.0
[0.5.0] - 2026-06-14: scale-invariant parallelism, angle and rotation assertions
Minor release. Fixes the scale-dependence of the parallel check and adds an angle-between assertion and a proper-rotation matrix assertion.
Fixed
AreParallel/IsParallelToare now scale-invariant. The check compared the raw cross-product magnitude|u x v|against an absolute tolerance, so whether two vectors read as parallel depended on their length, not just their direction: the same angular deviation passed at unit scale and failed at large scale. It now compares the sine of the angle,|u x v| / (|u| |v|), against the tolerance (an angular measure), the same normalization the package already applied inIsCollinear. A zero or shorter-than-tolerance vector is still treated as parallel to any vector. Tolerances chosen for unit vectors are unchanged in meaning; tolerances applied to non-unit vectors now express an angle rather than a magnitude.
Added
Assert.That(vector).HasAngleBetweenApproximately(other, expectedRadians, tolerance)asserts the unsigned angle between two vectors (on[0, pi]) is within tolerance of an expected value. The angle is computed asatan2(|u x v|, u . v), which stays accurate across the whole range whereacosof the normalized dot product loses precision near0andpi.LinearAlgebra.AngleBetween(u, v)exposes the same computation on the framework-agnostic core.Assert.That(matrix).IsRotation(tolerance)asserts aMatrix4x4is a proper rotation: orthogonal (M * M^T = I) with determinant+1. Reflections (determinant-1) and matrices carrying translation or scale are rejected. Exposed on the core asLinearAlgebra.IsRotation.
Changed
- Bumped
PackageValidationBaselineVersionfrom0.4.2to0.4.3on both packages so ApiCompat strict-mode validates0.5.0against the most recently published baseline.
v0.4.3
[0.4.3] - 2026-06-12: double-precision magnitude for IsNormalized and HasMagnitudeApproximately
Patch release. Computes vector and quaternion magnitudes in double precision so a tight tolerance reflects the value's actual deviation from unit length rather than single-precision arithmetic noise. No public API change.
Fixed
IsNormalized(Vector3 and Quaternion) andHasMagnitudeApproximately(Vector3) now compute the magnitude in double precision. They previously calledSystem.Numerics.Vector3.Length()/Quaternion.Length(), which compute the dot product and square root infloat. The residual single-precision error could defeat a tight tolerance: a quaternion normalized to float precision could failIsNormalizedat a small tolerance, and at large coordinates the float square overflows to infinity, which makesHasMagnitudeApproximatelyunsatisfiable. The components now widen todoublebefore the sum of squares and the square root, the same widening already used forPositionDistanceand the0.4.1quaternion-angle fix. The comparison semantics and the meaning oftoleranceare unchanged.
Changed
- Bumped
PackageValidationBaselineVersionfrom0.4.1to0.4.2on both packages so ApiCompat strict-mode validates0.4.3against the most recently published baseline. No public API change; only the assembly-version suppression's target moves.
v0.4.2
[0.4.2] - 2026-06-05: pose-tolerance migration and projection docs
Documentation and release-tooling patch. No code, public API, or behavior change; the 0.4.1 ApiCompat baseline surface is unchanged.
Changed
- README adds a "Migrating from a per-component quaternion tolerance" note under the pose section:
rotationToleranceDegreesis a geodesic angle in degrees, not a per-component quaternion delta, so a component epsilon must not be reused as the rotation tolerance. The note gives the rough angle-to-component mapping (a component toleranceεcorresponds to about115·εdegrees) so a fresh degrees value can be chosen. - README adds a "Projecting a non-
System.Numericspose" example:IsPoseApproximatelyEqualTooperates onSystem.Numerics, so a pose arriving as another shape (for example a protobuf message with separate position and orientation fields) is projected toVector3/Quaternionfirst, with a short conversion snippet. - The packed package README cross-references the migration note from the
PoseAssertionsentry. - Bumped
PackageValidationBaselineVersionfrom0.4.0to0.4.1on both packages so ApiCompat strict-mode validates0.4.2against the most recently published baseline. Documentation-only; noCompatibilitySuppressions.xmlchange. - The release workflow now publishes the matching
CHANGELOG.mdsection as the GitHub release body (body_path), so release notes carry the full hand-written detail instead of GitHub's auto-generated commit summary.
v0.4.1
What's Changed
- fix: stabilize quaternion rotation-angle metric (atan2, normalized) by @JohnVerheij in #58
Full Changelog: v0.4.0...v0.4.1
v0.4.0
What's Changed
- chore: TUnit 1.44.39 + CONVENTIONS.md v0.4 (family lockstep) by @JohnVerheij in #23
- chore(family): Release Notes pipeline, CONVENTIONS v0.5, codecov 90%, CoC v3.0 by @JohnVerheij in #24
- chore: split CoC and security reporting channels by @JohnVerheij in #25
- chore(family): CONVENTIONS v0.7 + six-package roster by @JohnVerheij in #26
- ci(deps): bump github/codeql-action from 4.35.4 to 4.35.5 by @dependabot[bot] in #27
- chore(infra): family-consistency sweep - Renovate migration by @JohnVerheij in #28
- ci(github-actions): update codecov/codecov-action digest to e79a696 by @renovate[bot] in #30
- ci(nuget): update dotnet monorepo by @renovate[bot] in #31
- deps(nuget): update dependency meziantou.analyzer to 3.0.90 by @renovate[bot] in #32
- deps(nuget): update dependency sonaranalyzer.csharp to 10.26.0.140279 by @renovate[bot] in #34
- deps(nuget): update dependency snapshotassertions.tunit to 0.4.0 by @renovate[bot] in #33
- deps(nuget): update tunit to v1.45.22 by @renovate[bot] in #35
- deps(nuget): update tunit to v1.45.29 by @renovate[bot] in #36
- deps(nuget): update dependency meziantou.analyzer to 3.0.91 by @renovate[bot] in #37
- ci(github-actions): update github/codeql-action digest to 7211b7c by @renovate[bot] in #38
- deps(nuget): update dependency meziantou.analyzer to 3.0.92 by @renovate[bot] in #39
- deps(nuget): update dependency meziantou.analyzer to 3.0.93 by @renovate[bot] in #40
- deps(nuget): update dependency meziantou.analyzer to 3.0.94 by @renovate[bot] in #41
- deps(nuget): update dependency sonaranalyzer.csharp to 10.27.0.140913 by @renovate[bot] in #42
- ci(github-actions): update actions/setup-dotnet digest to 9a946fd by @renovate[bot] in #43
- deps(nuget): update dependency meziantou.analyzer to 3.0.98 by @renovate[bot] in #44
- deps(nuget): update tunit to v1.47.0 by @renovate[bot] in #45
- chore(ci): add GitHub Actions security scanning and supply-chain hardening by @JohnVerheij in #46
- ci(github-actions): update actions/upload-artifact action to v7.0.1 by @renovate[bot] in #48
- ci(github-actions): update actions/setup-dotnet action to v5.3.0 by @renovate[bot] in #50
- ci(github-actions): update codecov/codecov-action action to v6.0.1 by @renovate[bot] in #49
- ci(github-actions): update nuget/login action to v1.2.0 by @renovate[bot] in #52
- ci(github-actions): update github/codeql-action action to v4.36.0 by @renovate[bot] in #51
- ci(github-actions): update actions/checkout action to v6.0.2 by @renovate[bot] in #47
- deps(nuget): update dependency dotnetprojectfile.analyzers to 1.14.1 by @renovate[bot] in #54
- deps(nuget): update tunit to v1.48.6 by @renovate[bot] in #55
- feat: pose and rigid-transform approximate-equality assertions by @JohnVerheij in #53
- ci(github-actions): update actions/checkout action to v6.0.3 by @renovate[bot] in #56
- ci(github-actions): update github/codeql-action action to v4.36.1 by @renovate[bot] in #57
New Contributors
Full Changelog: v0.3.0...v0.4.0
v0.3.0
What's Changed
- docs: add CHANGELOG version link-reference definitions by @JohnVerheij in #21
- feat(v0.3.0): add PoseRenderer and refresh family dependency lockstep by @JohnVerheij in #22
Full Changelog: v0.2.0...v0.3.0
v0.2.0
What's Changed
- docs: cookbook entries for quaternion / plane comparison and NaN section by @JohnVerheij in #15
- docs: reframe positioning to match the wider math-assertion scope by @JohnVerheij in #16
- ci(deps): bump github/codeql-action from 4.35.3 to 4.35.4 by @dependabot[bot] in #17
- ci(deps): bump actions/attest-build-provenance from 2.4.0 to 4.1.0 by @dependabot[bot] in #18
- feat(v0.2.0): per-component delta diagnostics + axis-angle quaternion assertion by @JohnVerheij in #19
- chore: rewrite test doc comment by @JohnVerheij in #20
Full Changelog: v0.1.0...v0.2.0
v0.1.0
What's Changed
- ci(deps): bump actions/attest-sbom from 2.4.0 to 4.1.0 by @dependabot[bot] in #1
- ci(deps): bump NuGet/login from ebc737b6fc418a6ca0073cf116ec8dc156d8b81e to 8d196754b4036150537f80ac539e15c2f1028841 by @dependabot[bot] in #2
- ci(deps): bump dependabot/fetch-metadata from 2.5.0 to 3.1.0 by @dependabot[bot] in #3
- feat(core): add Cluster 1 tolerance primitives toward 0.1.0 by @JohnVerheij in #4
- feat(core): add Cluster 2 System.Numerics compounds toward 0.1.0 by @JohnVerheij in #5
- feat(core): add Cluster 3 sequence-property checks toward 0.1.0 by @JohnVerheij in #6
- feat(core): add Cluster 4 statistical-property checks toward 0.1.0 by @JohnVerheij in #7
- feat(core): add Cluster 5 linear-algebra invariants toward 0.1.0 by @JohnVerheij in #8
- feat(core): add Cluster 6 number-theory predicates toward 0.1.0 by @JohnVerheij in #9
- feat(geometry3d): add Cluster 7a — primitives + property predicates by @JohnVerheij in #10
- Feat/0.1.0 cluster7b geometry containment distance by @JohnVerheij in #11
- Feat/0.1.0 cluster7c geometry intersection pointcloud by @JohnVerheij in #12
- feat(adapter): expand MathAssertions.TUnit to cover the full 0.1.0 co… by @JohnVerheij in #13
- chore(release): prepare 0.1.0 release by @JohnVerheij in #14
New Contributors
- @dependabot[bot] made their first contribution in #1
- @JohnVerheij made their first contribution in #4
Full Changelog: v0.0.1...v0.1.0