Skip to content
Open
Show file tree
Hide file tree
Changes from 250 commits
Commits
Show all changes
280 commits
Select commit Hold shift + click to select a range
d5c4d0c
MCMApproximations: overhaul the test suite
kellerlv May 18, 2026
4699fb9
added more tests pulled from examples
tbrysiewicz May 18, 2026
f1bcd02
Add tests for LieAlgebraRepresentations' untested exports
kellerlv May 18, 2026
a200411
ResLengthThree: overhaul the test suite
kellerlv May 18, 2026
1402402
Add tests for TensorComplexes' untested exports
kellerlv May 18, 2026
925df17
Add tests for TorAlgebra's untested exports
kellerlv May 18, 2026
8873a19
Strengthen the InverseSystems test suite with rigorous assertions
kellerlv May 18, 2026
c78d075
Overhaul KustinMiller test coverage
kellerlv May 18, 2026
21bcd44
HomotopyLieAlgebra: add test coverage, remove dead code
kellerlv May 18, 2026
448744a
SchurComplexes: add TEST coverage for internal tableau helpers
kellerlv May 18, 2026
257469e
SchurComplexes: add TEST coverage for standardZ2Tableaux
kellerlv May 18, 2026
d5865dd
SchurComplexes: add TEST coverage for tableauxDiff and straightening
kellerlv May 18, 2026
f14c3bc
SchurComplexes: add direct TEST coverage for permutedTableau and shuf…
kellerlv May 18, 2026
32a647a
Add SpechtModule test coverage for the exported functions
kellerlv May 18, 2026
5ecad30
SchurFunctors: add test coverage for the untested exports
kellerlv May 18, 2026
48f1a22
HigherCIOperators: add TEST coverage for ciOperatorResolution
kellerlv May 18, 2026
9f58ba3
HigherCIOperators: add TEST coverage for trueKoszul
kellerlv May 18, 2026
f9c9634
HigherCIOperators: add TEST coverage for exteriorMultiplication assoc…
kellerlv May 18, 2026
fbead79
Add tests for several untested DirectSummands exports
kellerlv May 18, 2026
ec956ba
IncidenceCorrespondenceCohomology: cover the incidenceCohomology gap
kellerlv May 18, 2026
e47daba
WeylGroups: cover untested Bruhat/Hasse exports and revive a silenced…
kellerlv May 18, 2026
f4771e7
MatrixFactorizations: fix two correctness bugs in MF_functions.m2
kellerlv May 18, 2026
d00091e
MatrixFactorizations: clean up stale documentation
kellerlv May 18, 2026
25a62d9
MatrixFactorizations: add TEST coverage for untested exports
kellerlv May 18, 2026
4342f35
add tests for untested exported functions
dave-k-johnson May 18, 2026
7f5a13f
FormalGroupLaws test refactoring, instance tests, trivial cases
connorjhaynes May 18, 2026
db68c65
first draft of testaudit
tbrysiewicz May 18, 2026
21f62e6
FormalGroupLaws instance tests
connorjhaynes May 18, 2026
b26dd22
FormalGroupLaws fix test
connorjhaynes May 18, 2026
5ed896c
fix typo
dave-k-johnson May 18, 2026
c416b86
updated test audit
tbrysiewicz May 18, 2026
6be4cba
Add error-handling and option tests for VirtualResolutions
kellerlv May 18, 2026
909df90
Tableaux: add TEST coverage for untested exports
kellerlv May 18, 2026
bb56454
ExteriorExtensions: add a TEST suite covering all exports
kellerlv May 18, 2026
4618451
Add Permutations test coverage for the indirect-only exports
kellerlv May 18, 2026
8d254fd
Add SimplicialComplexes test coverage for the named-complex constructors
kellerlv May 18, 2026
12eda73
SimplicialModules: test simplicialTensor, tensorLES, symmetricQuotient
kellerlv May 18, 2026
b501221
TateOnProducts: rigorous test-suite overhaul
kellerlv May 18, 2026
7f83385
Add NoPrune, error-path, and kernel regression tests for PushForward
kellerlv May 18, 2026
13a10c4
Add MatrixSchubert tests for dark exports, options, and algorithms
kellerlv May 18, 2026
f416c83
TateOnProducts: keep the package authors' commented scratch in place
kellerlv May 18, 2026
4f830b1
Revert "Add NoPrune, error-path, and kernel regression tests for Push…
kellerlv May 18, 2026
a7fae0c
Posets: add tests for untested exported functions
kellerlv May 18, 2026
be43734
MultiplicitySequence: add tests for untested exported functions
kellerlv May 18, 2026
69132e5
Add test coverage for the untested Graphs exports
kellerlv May 18, 2026
a26628f
MultiplicitySequence: resolve three issues flagged by the test audit
kellerlv May 18, 2026
815fa5c
OIGroebnerBases: add tests and stress tests for untested exports
kellerlv May 19, 2026
42c0c74
Add coverage and stress tests for Polyhedra
kellerlv May 19, 2026
8ae1b94
Flag broken saveSession, bipyramid debug output, and orphan test file
kellerlv May 19, 2026
aea578a
Add Permanents test coverage for pminors and hand-computed permanents
kellerlv May 19, 2026
53b0c65
Permanents: make glynn error in characteristic 2, fix pminors unit ideal
kellerlv May 19, 2026
3d4974d
Add K3Carpets tests for the untested exports
kellerlv May 19, 2026
2b6db0e
Add ReesAlgebra test coverage for specialFiber, symmetricKernel, options
kellerlv May 18, 2026
12f667b
ReesAlgebra: fix the whichGm return value, an error message, stale code
kellerlv May 18, 2026
52f7785
ReesAlgebra: flag the dead reesIdeal options with a FIXME
kellerlv May 19, 2026
d07155a
Schubert2: cover adams, degeneracyLocus, kernelBundle, intermediates
kellerlv May 18, 2026
916926a
Add QuadraticIdealExamplesByRoos tests for the untested exports
kellerlv May 18, 2026
4251d35
Fix missing-comma typo in roosTable#70
kellerlv May 18, 2026
b9cb8f8
Complexes: add tests and stress tests for the pruneComplex routines
kellerlv May 19, 2026
582240b
Complexes: fix pruneComplex grading under PruningMap => false
kellerlv May 19, 2026
f58e160
Complexes: fix pruneDiff grading for twisted complexes
kellerlv May 19, 2026
edcefd9
Update TangentCone.m2
GuanyuLee May 19, 2026
eea4571
InvariantRing: add tests for previously untested exports
kellerlv May 19, 2026
019f892
SegreClasses: add tests for isMultiHom, projectiveDegree, chowClass
kellerlv May 19, 2026
d771a20
Add ResidualIntersections test coverage; repair a broken TEST block
kellerlv May 19, 2026
d979279
ResidualIntersections: fix isLicci misclassifying complete intersections
kellerlv May 19, 2026
a416b22
ResidualIntersections: fix the no-op clamp in hasSlidingDepth
kellerlv May 19, 2026
a41a604
Regularity: fix mRegularity on monomial curves and dimension-0 ideals
kellerlv May 19, 2026
aefc87a
LexIdeals: expand the test suite and fix two empty-list crashes
kellerlv May 19, 2026
08798cd
Add coverage and stress tests for SectionRing; fix isMRegular(F,m)
kellerlv May 19, 2026
44e9707
Flag the globallyGenerated(Module) infinite loop with a FIXME
kellerlv May 19, 2026
f4381db
Add tests for untested exports in the Kronecker package
kellerlv May 19, 2026
6920380
Kronecker: flag code-health issues with FIXME/TODO comments
kellerlv May 19, 2026
84670db
Add coverage and stress tests for RelativeCanonicalResolution
kellerlv May 19, 2026
e495fa1
RationalMaps: add tests for the seven untested exports
kellerlv May 19, 2026
e5c7b8e
Add coverage and stress tests for PolyominoIdeals
kellerlv May 19, 2026
2caf7a6
Fix randomPolyomino generators to produce edge-connected polyominoes
kellerlv May 19, 2026
1f14d09
Add RandomComplexes test coverage for all exported functions
kellerlv May 19, 2026
9560e1e
RandomComplexes: fix the sign flip in normalize
kellerlv May 19, 2026
9b33924
RandomComplexes: flag the randomChainComplex homology-rank gap with a…
kellerlv May 19, 2026
a6da898
Update tests.m2
GuanyuLee May 19, 2026
10af25e
ModuleDeformations: expand the test suite
kellerlv May 19, 2026
c46eff9
MonomialAlgebras: add tests for the untested option symbols
kellerlv May 19, 2026
bb859ed
MultiprojectiveVarieties: add tests for untested exports
kellerlv May 19, 2026
18fea17
Add coverage, compatibility, and stress tests for MultigradedBGG
kellerlv May 19, 2026
db059df
added our working version of TestAudit, to be removed before monster …
tbrysiewicz May 19, 2026
8204ec1
made a TODO note on long test
tbrysiewicz May 19, 2026
496a314
add Normalize test to NumericalLinearAlgebra
dave-k-johnson May 19, 2026
d539184
add Reverse test to NumericalLinearAlgebra
dave-k-johnson May 19, 2026
bcc9d87
Update AnalyzeSheafOnP1.m2
GuanyuLee May 19, 2026
7428449
Add coverage tests and repair a silenced test for NumericalSchubertCa…
kellerlv May 19, 2026
5b21473
NumericalSemigroups: add tests for untested exports
kellerlv May 19, 2026
48e0fde
Add tests for untested exports in the PencilsOfQuadrics package
kellerlv May 19, 2026
7bc9aa9
NoetherianOperators: add tests for untested exports
kellerlv May 19, 2026
8ab7967
QuaternaryQuartics: add tests for untested exports
kellerlv May 19, 2026
bc19569
Revive stranded tests and add stress tests for ResolutionsOfStanleyRe…
kellerlv May 19, 2026
877b2dc
CorrespondenceScrolls: add tests for the untested export and stress c…
kellerlv May 20, 2026
f0e72bd
DecomposableSparseSystems: stress coverage and tests for the untested…
kellerlv May 20, 2026
5a9a8ce
Fix a bug and add tests for the PlaneCurveLinearSeries package
kellerlv May 19, 2026
9eca33e
PlaneCurveLinearSeries: flag code-health issues with TODO comments
kellerlv May 20, 2026
a2af019
Add tests for untested exports in the CotangentSchubert package
kellerlv May 20, 2026
f9e5664
CotangentSchubert: flag code-health issues with FIXME/TODO comments
kellerlv May 20, 2026
46098c5
Add coverage tests for untested exports of WeilDivisors
kellerlv May 20, 2026
28f2157
CoincidentRootLoci: add tests for untested exports
kellerlv May 20, 2026
0dc3cc1
Add coverage tests for untested exports of CellularResolutions
kellerlv May 20, 2026
6a3c1ae
Fix bare-Boolean test and add coverage tests for ExteriorIdeals
kellerlv May 20, 2026
cb67966
BinomialEdgeIdeals: fix isEffective bug and add tests for untested ex…
kellerlv May 20, 2026
75bbcf4
Fix silent-pass test and add coverage tests for FastMinors
kellerlv May 20, 2026
6520cfd
Strengthen existing tests and add closure-property tests for Exterior…
kellerlv May 20, 2026
164eaff
GKMVarieties: add tests for the untested exports
kellerlv May 20, 2026
b725825
FiniteFittingIdeals: add tests for untested exports and upgrade shape…
kellerlv May 20, 2026
903bffb
FiniteFittingIdeals: flag the four soft-failure paths with TODO
kellerlv May 20, 2026
c670c91
Fix broken QuotientRing methods and add coverage tests for GenericIni…
kellerlv May 20, 2026
c0e2165
Fix a bug in inTruncatedList and add tests for GeometricDecomposability
kellerlv May 20, 2026
44211ef
GeometricDecomposability: flag code-health issues with TODO comments
kellerlv May 20, 2026
dd58f5f
StatePolytope: stress coverage for initialIdeals and structural cross…
kellerlv May 20, 2026
19123d4
SimplicialPosets: add tests for testFVector and boundary cases
kellerlv May 20, 2026
30c9651
Saturation: stress coverage for annihilator, saturate, and quotient
kellerlv May 20, 2026
a200fe9
ReflexivePolytopesDB: tests for availableOffline, description, KSEntr…
kellerlv May 20, 2026
8b1f58e
RandomIdeals: fix randomBinomialIdeal(Sequence,Ring) dispatch and str…
kellerlv May 20, 2026
f2154ed
MonomialOrbits: fix empty-degs crash in fromLis and stress coverage
kellerlv May 20, 2026
6f8527a
MonodromySolver: stress coverage for solveFamily, sparseMonodromySolv…
kellerlv May 20, 2026
ab853c1
LatticePolytopes test coverage increase
connorjhaynes May 20, 2026
05da380
Matroids: fix extension typo/type-mismatch, document idealOrlikSolomo…
kellerlv May 20, 2026
bcc714f
Add coverage tests for untested exports of Jets
kellerlv May 20, 2026
abf4ff4
K3Surfaces: add live tests for the 5 functions and 2 types covered on…
kellerlv May 20, 2026
8b765b9
K3Surfaces: flag the audit's open items with TODO comments
kellerlv May 20, 2026
4d01ef7
Add coverage tests for untested exports of LinearTruncations
kellerlv May 20, 2026
398a56d
M0nbar: add Fcurves(7) regression and permute identity/round-trip tests
kellerlv May 20, 2026
fb1fca0
Add coverage tests for untested exports of MatchingFields
kellerlv May 20, 2026
3d60dad
Mark untested MatchingFields option symbols with TODO comments
kellerlv May 20, 2026
021ce95
Fix duplicate Headline and add option-coverage tests for MixedMultipl…
kellerlv May 20, 2026
ccfec2f
Add coverage tests for untested options of MultigradedImplicitization
kellerlv May 20, 2026
562f323
LocalRings: stress coverage for dark exports, prime-ideal hooks, and …
kellerlv May 20, 2026
9aab903
MultiGradedRationalMap: add tests for isBiratMap, Hm1Rees0, and the d…
kellerlv May 20, 2026
4172549
MultiGradedRationalMap: fix satSpecialFiber doc misfile, doc typos, a…
kellerlv May 20, 2026
412afb1
MultiplierIdeals: re-enable disabled determinantal test, delete dead …
kellerlv May 20, 2026
83347d2
MultiplierIdeals: flag style/doc observations with TODO comments
kellerlv May 20, 2026
64ac719
Points: add tests for points, minMaxResolution, and the VerifyPoints …
kellerlv May 20, 2026
2d59e40
Add the first registered tests to RandomCurvesOverVerySmallFiniteFields
kellerlv May 20, 2026
9da0c57
QthPower: add direct tests for grevlexWeight, testWeightMatrix, qthCo…
kellerlv May 20, 2026
e97fd4e
Add tests for untested exports in RandomMonomialIdeals
kellerlv May 20, 2026
2a05799
RandomMonomialIdeals: flag option-symbol and RNG-seeding gaps with TODOs
kellerlv May 20, 2026
e2f7b86
Strengthen cCode test and add coverage tests for SLPexpressions
kellerlv May 20, 2026
c727367
SCMAlgebras: add boundary tests and cross-dispatch consistency tests
kellerlv May 20, 2026
fc80628
SCMAlgebras: flag the suspected isSCM(Ideal) bug with a TODO
kellerlv May 20, 2026
1716a8a
SLnEquivariantMatrices: fix doc cross-refs and add tests
kellerlv May 20, 2026
7b25b81
SLnEquivariantMatrices: flag minor doc/test gaps with TODO comments
kellerlv May 20, 2026
b280cb2
Add coverage tests for untested exports of Seminormalization
kellerlv May 20, 2026
7a91175
SimplicialDecomposability: add direct tests for shellingOrder and its…
kellerlv May 20, 2026
7687658
Add coverage tests for isAdmissible and isAdmissibleGM in SpecialFano…
kellerlv May 20, 2026
b0de9c7
WittVectors: remove dead exports, fix doc/test bugs, add tests
kellerlv May 20, 2026
e19e1de
WittVectors: flag remaining code-health issues with FIXME/TODO comments
kellerlv May 20, 2026
d92b9d1
Add coverage tests for untested options and negative cases in Strongl…
kellerlv May 20, 2026
fc0e3f3
SuperLinearAlgebra: fix cout33/cout44 typos in superMatrixParity and …
kellerlv May 20, 2026
cb0cb2f
Hadamard: cover the four untested exports with assertions
kellerlv May 20, 2026
aca7ee4
SymbolicPowers test updates from Ashley
connorjhaynes May 20, 2026
3b43ed6
add tests for Parametrization, consolidate tests
dave-k-johnson May 20, 2026
2cec763
FourierMotzkin: stress coverage for error paths, doc claims, and dege…
kellerlv May 20, 2026
f39b24b
Fix testing issues in LatticePolytopes and SymbolicPowers
connorjhaynes May 20, 2026
94d5f1f
added new version of testAudit
tbrysiewicz May 20, 2026
54aea16
loaddoc is false now
tbrysiewicz May 20, 2026
a1067ab
ChainComplexExtras: cover extendFromMiddle and the documented-but-une…
kellerlv May 20, 2026
7c654db
many loadpackages became false
tbrysiewicz May 20, 2026
e5d62c3
Update AnalyzeSheafOnP1.m2
GuanyuLee May 20, 2026
4cc2956
ConnectionMatrices: cover connectionMatrix + direct normalForm tests,…
kellerlv May 20, 2026
9db815e
ConnectionMatrices: TODO documenting the use-R scope gotcha
kellerlv May 20, 2026
304fccf
Binomials: refactor incomprehensable-hack, expand untested-export cov…
kellerlv May 20, 2026
9d1a462
MacaulayPosets: stress coverage for options, multi-arg ring ops, erro…
kellerlv May 20, 2026
df5cbad
EliminationMatrices: cover the audit-flagged untested exports
kellerlv May 20, 2026
8ae0770
EliminationMatrices: structural assertions + cleanup the export block
kellerlv May 20, 2026
168d1c2
Add coverage tests for untested exports of EllipticCurves
kellerlv May 20, 2026
9b0200e
EnumerationCurves: split monolithic TEST, re-enable degree-5 Katz num…
kellerlv May 20, 2026
616c6b4
Add option-coverage tests for FrobeniusThresholds
kellerlv May 20, 2026
6695ac7
Brackets: fix commonRing missing-else bug, export GCMatrix, expand te…
kellerlv May 20, 2026
35f177e
VersalDeformations: cover untested exports + fix three doc Usage typos
kellerlv May 20, 2026
b4c3abc
GroebnerStrata: fix latent bug, expand test coverage, align doc with …
kellerlv May 20, 2026
a948c88
LatticePolytopes more tests
connorjhaynes May 20, 2026
153a557
Portability fix and coverage test for FunctionFieldDesingularization
kellerlv May 20, 2026
42b3c95
FunctionFieldDesingularization: deeper assertions on arcs + doc fixes
kellerlv May 20, 2026
c91b23a
GroebnerWalk: fill audit-flagged gaps with seven targeted tests
kellerlv May 20, 2026
b3881f4
HodgeIntegrals: fix doc inconsistencies, prune dead code, expand stre…
kellerlv May 20, 2026
7249e96
Add coverage tests + end-- terminator for InvolutiveBases
kellerlv May 20, 2026
c65e4f4
ChainComplexExtras: merge in core MonomialIdealResolutions functions
kellerlv May 20, 2026
27024e5
WhitneyStratifications: remove undefined coordProj export, add test c…
kellerlv May 20, 2026
4a43d17
ChainComplexExtras: reconcile isQuasiIsomorphism, migrate EK/AHH to C…
kellerlv May 20, 2026
70903dc
Remove stray top-level dev-scratch from SymbolicPowers
kellerlv May 20, 2026
09a07b2
add tests to NumericSolutions
dave-k-johnson May 20, 2026
fdb1748
AdjointIdeal: unskip tests and add traceMatrix coverage
kellerlv May 20, 2026
e283ad0
LatticePolytopes test refactoring, speedups
connorjhaynes May 20, 2026
21b4678
AdjunctionForSurfaces: add test coverage for all 8 exports
kellerlv May 20, 2026
24493dc
AlgebraicSplines: cover option-symbol exports
kellerlv May 20, 2026
f18ff50
AllMarkovBases: cover untested exports and option branches
kellerlv May 20, 2026
87a56c6
add tests to Oscillators
dave-k-johnson May 20, 2026
0edd4b2
AnalyzeSheafOnP1: fix swap-branch bug in analyze and add tests
kellerlv May 20, 2026
cc94e17
Benchmark: cover dispatch variants and error paths for runBenchmarks
kellerlv May 20, 2026
f01f16b
ConformalBlocks: wrap two call-with-no-assert tests in real assertions
kellerlv May 20, 2026
0e75cb1
LatticePolytopes test speedup
connorjhaynes May 20, 2026
ddfb70a
ConvexInterface: fix doc Usage typos and add gated TEST scaffolding
kellerlv May 20, 2026
f236d1e
Update BGG.m2
GuanyuLee May 20, 2026
8e52308
Browse: smoke-test the lone export and the menu dispatch surface
kellerlv May 20, 2026
5625bec
Probability test coverage increased (thanks Ashley!)
connorjhaynes May 20, 2026
32ba918
CpMackeyFunctors: cover untested exports and fix two silent-pass TESTs
kellerlv May 20, 2026
d45c669
add tests to VNumber
dave-k-johnson May 20, 2026
2277f61
EliminationTemplates: fix parseMartyushevBases logic + doc typos + tests
kellerlv May 20, 2026
50be871
FGLM: cover precondition error paths and the GroebnerBasis dispatch
kellerlv May 20, 2026
0850bac
ForeignFunctions: cover 5 previously untested exports
kellerlv May 20, 2026
b7ab940
GameTheory: fix doc typos and cover KonstanzVariableName + ring guards
kellerlv May 20, 2026
928a1cf
Isomorphism: pin current behavior of the silenced-assert TODO case
kellerlv May 20, 2026
3bc2b4c
JSON: cover json alias + IndentLevel, add round-trip, wrap dev scratch
kellerlv May 20, 2026
2968cf6
JSONRPC: fix doc typo and pin invalid-params error-code regression
kellerlv May 20, 2026
84fa0d0
RandomObjects test (thanks Ashley!)
connorjhaynes May 20, 2026
37f0c90
TriangularSets test cleanup. Strange test structure.
connorjhaynes May 20, 2026
6753d57
LLLBases: cover gramm and the 8 strategy-symbol exports
kellerlv May 20, 2026
7fcce5f
MRDI: fix two doc nits and cover save-path "not implemented yet" errors
kellerlv May 20, 2026
9f23079
Markov: add the package's first TEST block
kellerlv May 20, 2026
d0d4d1c
Miura: fix error-string + doc typos and cover setPolynomialRing errors
kellerlv May 20, 2026
de19e0f
Removed leftover comments
connorjhaynes May 20, 2026
456e510
MultiplierIdealsDim2: fix doc Usage typo + cover three option branches
kellerlv May 20, 2026
2b39009
Quasidegrees: cover six previously-indirect exports
kellerlv May 20, 2026
30c56aa
IntegerProgramming: cover infeasible branch + Matrix overloads + adap…
kellerlv May 20, 2026
d1bf4c5
OnlineLookup test coverage increased (thanks Ashley!)
connorjhaynes May 20, 2026
13fdf00
PositivityToricBundles: cover four audit-flagged untested exports
kellerlv May 20, 2026
d06f262
RandomPlaneCurves: regression test for completeLinearSystemOnNodalPla…
kellerlv May 20, 2026
d66ec6c
RandomSpaceCurves: cover knownUnirationalComponentOfSpaceCurves + doc…
kellerlv May 20, 2026
a6317b4
add test to Book3264Examples
dave-k-johnson May 20, 2026
7bd92ed
RationalPoints: cover the four option-symbol exports
kellerlv May 20, 2026
fda1105
Serialization: add the package's first TEST block
kellerlv May 20, 2026
eefcf06
Units: add the package's first TEST block
kellerlv May 20, 2026
feb6c62
XML: cover libxml round trip + xmlTypeTable + getChildren / getAttrib…
kellerlv May 20, 2026
094222c
SimpleDoc: cover arXiv / wikipedia / stacksProject / packageTemplate …
kellerlv May 20, 2026
268b472
SwitchingFields: fix char-0 string-return + cover extendFieldByDegree
kellerlv May 20, 2026
4c42b9e
SpaceCurves: add the package's first TEST blocks
kellerlv May 20, 2026
5d1d624
TerraciniLoci: cover the (ZZ, Matrix, Ideal) overload and r<1 error
kellerlv May 20, 2026
36f0145
NAGtypes: cover five previously-indirect accessor / constructor exports
kellerlv May 20, 2026
bac7ed0
NonPrincipalTestIdeals: gate stray prints, fix stale error labels, dr…
kellerlv May 20, 2026
2cd931e
PathSignatures: cover tensorLog and getCoefficientRing directly
kellerlv May 20, 2026
9e2380f
SymmetricPolynomials test coverage increased
connorjhaynes May 20, 2026
7781db7
ChainComplexExtras: re-export Complexes' Concentration option
kellerlv May 21, 2026
14cf109
AdjointIdeal: reuse cached doc-example output on machines without Maple
kellerlv May 21, 2026
4dcfd5c
add tests to ExampleSystems, fix bug in ExampleSystems
dave-k-johnson May 21, 2026
7839e30
Update MergeTeX.m2
GuanyuLee May 21, 2026
1890bfc
RationalPoints2 slight test coverage increase
connorjhaynes May 21, 2026
0df6918
add tests to NumericalCertification
dave-k-johnson May 21, 2026
f46f22b
SRdeformation test coverage increased (thanks Ashley!)
connorjhaynes May 21, 2026
ea9dc62
MonodromySolver: drop pure-monomial mixedVolume assertion that crashe…
kellerlv May 21, 2026
e1eadec
MultiplierIdeals: re-disable (3,5) determinantal assertion that OOMs …
kellerlv May 22, 2026
4d8991d
DirectSummands: tighten error tests + cover GF(p^e) and elliptic-curv…
kellerlv May 22, 2026
0ed506d
Merge branch 'development' into development
mahrud May 23, 2026
dd786bb
Apply suggestion from @mahrud
kellerlv May 23, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
289 changes: 289 additions & 0 deletions M2/Macaulay2/m2/testaudit.m2
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I presume this is redundant with the TestAudit package PR? Which one should be merged first?

Copy link
Copy Markdown
Contributor Author

@kellerlv kellerlv May 22, 2026

Choose a reason for hiding this comment

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

Yes (edited because I misread this originally)

Original file line number Diff line number Diff line change
@@ -0,0 +1,289 @@
CommentReport = symbol CommentReport
SpeedReport = symbol SpeedReport

testAudit = method(Options => {CommentReport => false, SpeedReport => false})

--------------------------------------------------------------------------------
-- Helpers
--------------------------------------------------------------------------------

testInputs = method()

testInputs Package := pkg -> tests pkg

testInputs String := pkgname -> testInputs needsPackage(pkgname, LoadDocumentation => true)


testCodeString = method()

testCodeStringFromInputs := inputs -> (
demark(newline, apply(toList(0..#inputs-1), i -> inputs#i#"code"))
)

testCodeString Package := pkg -> testCodeStringFromInputs testInputs pkg

testCodeString String := pkgname -> testCodeString needsPackage(pkgname, LoadDocumentation => true)


packageSourceString = method()

packageSourceString Package := pkg -> try get pkg#"source file" else ""

packageSourceString String := pkgname -> packageSourceString needsPackage(pkgname, LoadDocumentation => true)


exportedSymbols = method()

exportedSymbols Package := pkg -> sort toList pkg#"exported symbols"

exportedSymbols String := pkgname -> exportedSymbols needsPackage(pkgname, LoadDocumentation => true)


exportedValue := s -> try value s else null

className := x -> toString class x

isExportedFunction := s -> (
v := exportedValue s;
member(className v, {"MethodFunction", "MethodFunctionWithOptions", "FunctionClosure", "Function"})
)

isExportedType := s -> (
v := exportedValue s;
className v === "Type"
)

optionNamesForSymbol := s -> (
v := exportedValue s;
try sort apply(toList keys options v, toString) else {}
)

methodStringsForSymbol := s -> (
v := exportedValue s;
try sort apply(toList methods v, toString) else {}
)

wordMatch := (name, code) -> match("\\b" | toString name | "\\b", code)

countLinesMatching := (pat, code) -> #select(lines code, line -> match(pat, line))

shortList := (L, n) -> (
if #L === 0 then ""
else if #L <= n then demark(", ", L)
else demark(", ", take(L, n)) | ", ..."
)

lineNumbers := n -> if n === 0 then {} else toList(0..n-1)

snippet := (s, n) -> (
t := replace("^ *| *$", "", s);
if length t <= n then t else substring(0, n, t) | "..."
)

auditListLines := (label, L) -> (
{"- " | label | " (" | toString(#L) | "):"} |
(if #L === 0 then {" none"} else apply(L, item -> " - " | item)) |
{""}
)

printAuditList := (label, L) -> (
scan(auditListLines(label, L), print);
)

sourceLinesBeforeEnd := filename -> (
srcLines := lines get filename;
endLines := select(lineNumbers(#srcLines), i -> match("^ *end *$", srcLines#i));
if #endLines === 0 then srcLines else take(srcLines, first endLines)
)

sourceLineMatches := (pkg, pat) -> (
filename := try pkg#"source file" else "";
if filename === "" or not fileExists filename then {}
else (
srcLines := sourceLinesBeforeEnd filename;
apply(select(lineNumbers(#srcLines), i -> match(pat, srcLines#i)), i ->
snippet(srcLines#i, 72) | " (source: " | filename | ":" | toString(i + 1) | ")")
)
)

blockCommentLineMatches := (pkg, pat) -> (
filename := try pkg#"source file" else "";
if filename === "" or not fileExists filename then {}
else (
srcLines := sourceLinesBeforeEnd filename;
inBlock := false;
matches := {};
scan(lineNumbers(#srcLines), i -> (
line := srcLines#i;
startsBlock := match("-\\*", line);
endsBlock := match("\\*-", line);
wasInBlock := inBlock;

if startsBlock then inBlock = true;
if (wasInBlock or startsBlock) and match(pat, line) then (
matches = append(matches, snippet(line, 72) | " (source: " | filename | ":" | toString(i + 1) | ")")
);
if endsBlock then inBlock = false;
));
matches
)
)

silencedTestMatches := pkg -> unique(sourceLineMatches(pkg, "^ *--+ *TEST *///") | blockCommentLineMatches(pkg, "TEST *///"))

styleOfTests := inputs -> (
locs := apply(toList(0..#inputs-1), i -> toString locate inputs#i);
if any(locs, loc -> match("/tests/", loc)) then "auxiliary file(s)"
else "interspersed"
)

testSourceLines := inputs -> (
files := unique apply(toList(0..#inputs-1), i -> (locate inputs#i)#0);
{"test sources:"} |
(if #files === 0
then {" none"}
else apply(files, file -> " - " | file))
)

containsAll := (code, names) -> all(names, name -> wordMatch(name, code))

typeNamesInMethodString := meth -> (
parts := separate(",", replace("^\\([^,]*,?|\\)$", "", meth));
select(apply(parts, s -> replace("^ *| *$", "", s)), s -> s =!= "")
)

isMethodTested := (meth, code) -> (
pieces := separate(",", replace("^\\(|\\)$", "", meth));
if #pieces === 0 then false
else (
functionName := replace("^ *| *$", "", first pieces);
wordMatch(functionName, code) and containsAll(code, typeNamesInMethodString meth)
)
)

--------------------------------------------------------------------------------
-- Comment report
--------------------------------------------------------------------------------

commentLinesIn := code -> select(lines code, line -> match("^ *--", line) and not match("^ *-- test source:", line))

headerCommentLinesBefore := testInput -> (
loc := locate testInput;
filename := loc#0;
startLine := loc#1;
if not fileExists filename then {}
else (
srcLines := lines get filename;
i := startLine - 2;
comments := {};
while i >= 0 and match("^ *--", srcLines#i) do (
comments = prepend(srcLines#i, comments);
i = i - 1;
);
comments
)
)

commentSectionLines := (label, comments) -> (
if #comments === 0 then {}
else {label | ":"} | apply(comments, c -> " " | c)
)

commentReportLines := inputs -> (
{"", "Comments:"} | flatten apply(toList(0..#inputs-1), i -> (
code := inputs#i#"code";
headerComments := headerCommentLinesBefore inputs#i;
inTestComments := commentLinesIn code;

if #headerComments > 0 or #inTestComments > 0
then {"", "TEST " | toString i | " -- source: " | toString locate inputs#i, "------------------------------------------------------------------------"} |
commentSectionLines("Header comments", headerComments) |
commentSectionLines("In-test comments", inTestComments)
else {}
))
)

printCommentReport := inputs -> (
scan(commentReportLines inputs, print);
)

--------------------------------------------------------------------------------
-- Speed report
--------------------------------------------------------------------------------

timeString := seconds -> toString seconds | "s"

speedReportLines := (pkg, inputs) -> (
timings := apply(toList(0..#inputs-1), i -> (
result := try (
t := elapsedTiming check(i, pkg);
{i, t#0, toString locate inputs#i, true}
) else {i, null, toString locate inputs#i, false};
result
));
successful := select(timings, row -> row#3);
totalTime := sum apply(successful, row -> row#1);

{"", "Speed Report:", ""} |
apply(timings, row -> (
if row#3
then " - TEST " | toString(row#0) | ": " | timeString(row#1) | " (" | row#2 | ")"
else " - TEST " | toString(row#0) | ": failed while timing (" | row#2 | ")"
)) |
{"", " total timed tests: " | toString(#successful) | "/" | toString(#timings),
" total time: " | timeString totalTime}
)

--------------------------------------------------------------------------------
-- Main audit
--------------------------------------------------------------------------------

testAudit Package := opts -> pkg -> (
inputs := testInputs pkg;
code := testCodeStringFromInputs inputs;
sourceCode := packageSourceString pkg;
syms := exportedSymbols pkg;

funcs := select(syms, isExportedFunction);
types := select(syms, isExportedType);
others := select(syms, s -> not isExportedFunction s and not isExportedType s);

untestedFunctions := select(apply(funcs, toString), name -> not wordMatch(name, code));

optionPairs := flatten apply(funcs, f -> apply(optionNamesForSymbol f, opt -> {toString f, opt}));
untestedOptions := select(optionPairs, pair -> (
opt := pair#1;
not wordMatch(opt, code)
));
untestedOptionLabels := apply(untestedOptions, pair -> pair#0 | ": " | pair#1);

methodPairs := flatten apply(funcs, f -> methodStringsForSymbol f);
untestedMethods := select(methodPairs, meth -> not isMethodTested(meth, code));

silencedTests := silencedTestMatches pkg;
fixmeTodos := sourceLineMatches(pkg, "FIXME|TODO|fixme|todo");

reportLines := {
"exported: " | toString(#funcs) | " functions, " | toString(#types) | " types, " | toString(#others) | " other symbols",
"n_tests: " | toString(#inputs),
"style: " | styleOfTests inputs,
""} |
testSourceLines inputs |
{"",
"Report:",
""
} |
auditListLines("untested functions", untestedFunctions) |
auditListLines("untested options", untestedOptionLabels) |
auditListLines("untested methods", untestedMethods) |
auditListLines("silenced tests", silencedTests) |
auditListLines("FIXME/TODO markers", fixmeTodos) |
(if opts.SpeedReport then speedReportLines(pkg, inputs) else {}) |
(if opts.CommentReport then commentReportLines inputs else {});

report := demark(newline, reportLines);
print report;
report
)

testAudit String := opts -> pkgname -> testAudit(needsPackage(pkgname, LoadDocumentation => true), opts)
1 change: 1 addition & 0 deletions M2/Macaulay2/packages/=distributed-packages
Original file line number Diff line number Diff line change
Expand Up @@ -295,3 +295,4 @@ MRDI
EliminationTemplates
WittVectors
Padic
TestAudit
80 changes: 80 additions & 0 deletions M2/Macaulay2/packages/A1BrouwerDegrees.m2
Original file line number Diff line number Diff line change
Expand Up @@ -858,3 +858,83 @@ H = makeHyperbolicUnstableForm GF(27);
assert(isIsomorphicForm(alpha, H));
assert(isIsomorphicForm(beta, H));
///

--The following tests were added during M2-GT 2026
-- Test 44. getRank test

TEST ///
-- Rank equals the matrix size, regardless of the entries.
alpha = makeGWClass matrix(QQ, {{1/1, 0, 0}, {0, -2, 0}, {0, 0, 5}});
assert(getRank alpha == 3);

beta = makeGWClass matrix(RR, {{1.0, 0}, {0, -1.0}});
assert(getRank beta == 2);

gamma = makeGWClass matrix(CC, {{1*ii, 0, 0, 0}, {0, -2, 0, 0}, {0, 0, 3, 0}, {0, 0, 0, 5}});
assert(getRank gamma == 4);

delta = makeGWClass matrix(GF(7), {{1, 0}, {0, 3}});
assert(getRank delta == 2);

-- getRank on a form built by makeDiagonalForm
epsilon = makeDiagonalForm(QQ, (2, -3, 5, -7));
assert(getRank epsilon == 4);

-- getRank on the hyperbolic plane
H = makeHyperbolicForm QQ;
assert(getRank H == 2);
///

--Test 45. getAnisotropicDimension over QQ
TEST ///
-- Hyperbolic plane: anisotropic dimension 0
H = makeHyperbolicForm QQ;
assert(getAnisotropicDimension H == 0);

-- <1,1> is anisotropic over QQ (no rational solution to x^2 + y^2 = 0)
twoPos = makeDiagonalForm(QQ, (1, 1));
assert(getAnisotropicDimension twoPos == 2);

-- <1,-1> is isomorphic to H, so anisotropic dimension 0
hyp = makeDiagonalForm(QQ, (1, -1));
assert(getAnisotropicDimension hyp == 0);

-- <1,1,1,1> over QQ: by the four-square theorem this is not hyperbolic in GW(QQ)
-- Its Witt index is 0 (no isotropic vector over QQ for the positive-definite form)
fourPos = makeDiagonalForm(QQ, (1, 1, 1, 1));
assert(getAnisotropicDimension fourPos == 4);

-- Consistency: anisotropic dimension + 2 * Witt index == rank
M = makeGWClass matrix(QQ, {{1/1, 0, 0}, {0, -2, 0}, {0, 0, 3}});
assert(getAnisotropicDimension M + 2 * getWittIndex M == getRank M);
///

-- Test 46 getAnisotropicDimensionQQp
TEST ///
-- <1,1> at p=2: 1+1=2 is not a norm from QQ_2*, so the form is anisotropic
twoPos = makeDiagonalForm(QQ, (1, 1));
assert(getAnisotropicDimensionQQp(twoPos, 2) == 2);

-- <1,-1> is the hyperbolic plane, always isotropic: anisotropic part is trivial
hyp = makeDiagonalForm(QQ, (1, -1));
assert(getAnisotropicDimensionQQp(hyp, 3) == 0);
///


-- Test 47 getAnisotropicPart
TEST ///
-- Anisotropic part of the hyperbolic plane is the zero form (empty diagonal).
H = makeHyperbolicForm QQ;
aH = getAnisotropicPart H;
assert(getRank aH == 0);

-- Anisotropic part of <1,1> over QQ is <1,1> itself (the form is anisotropic).
twoPos = makeDiagonalForm(QQ, (1, 1));
aTwo = getAnisotropicPart twoPos;
assert(isIsomorphicForm(aTwo, twoPos));

-- Anisotropic part of 2H = <1,-1,1,-1> is the zero form.
twoH = makeDiagonalForm(QQ, (1, -1, 1, -1));
aTwoH = getAnisotropicPart twoH;
assert(getRank aTwoH == 0);
///
Loading
Loading