Files
JuliaFEM.jl/test/runtests.jl
T
Jukka Aho fa762a11ec test: wire suite helpers, topics, and drop cantilever Gmsh mesh
The default harness loads shared helpers and smoke checks before topic
includes, registers poroelastic and thermo_poroelastic, drops the retired IO
topic, and removes the orphaned ASCII fixture.

- Add zero_alloc_helpers.jl, test_api_contract.jl, test_pkg_hygiene.jl, and
  test_inference_smoke.jl included once from runtests.jl
- Extend TOPICS; remove io; clarify test_args accepts topic names only
- Delete test/testdata/cantilever_beam.msh
2026-05-11 02:38:59 +03:00

107 lines
3.3 KiB
Julia

# SPDX-FileCopyrightText: 2015-2026 Jukka Aho
# SPDX-License-Identifier: MIT
using JuliaFEM, Test
# Shared zero-allocation / LLVM IR helpers for topic tests (loaded once).
include(joinpath(@__DIR__, "zero_alloc_helpers.jl"))
include(joinpath(@__DIR__, "test_api_contract.jl"))
include(joinpath(@__DIR__, "test_pkg_hygiene.jl"))
include(joinpath(@__DIR__, "test_inference_smoke.jl"))
# The active test tree mirrors `src/`. Every subdirectory below has its
# own `runtests.jl` that bundles the topic into a single `@testset`.
# Adding a new topic = adding the directory to `topics` below.
const TOPICS = [
"basis",
"fields",
"physics",
"elements",
"materials",
"topology",
"geometry",
"mesh",
"quadrature",
"domains/continuum",
"domains/heat",
"domains/darcy",
"domains/thermo_elastic",
"domains/poroelastic",
"domains/thermo_poroelastic",
"dofs",
"interface",
"assemblers",
"sparse",
"validation",
"reference",
"docs",
]
# If ARGS has no positional topic names, run every entry in `TOPICS`.
# Otherwise run only listed topics (in `TOPICS` order). Unknown names warn;
# if none match, run the full suite with a warning.
#
# `Pkg.test(; test_args=["assemblers", ...])` forwards those strings to ARGS.
# Only names from `TOPICS` below are accepted (e.g. `"assemblers"`), not file paths.
function _topics_from_args()
requested = String[s for s in ARGS if !startswith(s, '-')]
isempty(requested) && return TOPICS
known = Set(TOPICS)
unknown = filter(!in(known), requested)
if !isempty(unknown)
@warn "Unknown test topics (skipped): $(collect(unknown))"
end
want = Set(requested)
chosen = filter(in(want), TOPICS)
if isempty(chosen)
@warn "No valid topics in ARGS $(requested); running full suite"
return TOPICS
end
return chosen
end
@testset "JuliaFEM.jl" begin
@testset "Package loads" begin
@test isdefined(JuliaFEM, :AbstractBasis)
@test isdefined(JuliaFEM, :AbstractMesh)
@test isdefined(JuliaFEM, :AbstractInterfaceMesh)
@test isdefined(JuliaFEM, :InterfaceMesh)
@test isdefined(JuliaFEM, :AbstractTopology)
@test isdefined(JuliaFEM, :AbstractMaterial)
@test isdefined(JuliaFEM, :AbstractPhysics)
@test isdefined(JuliaFEM, :AbstractField)
@test isdefined(JuliaFEM, :AbstractFormulation)
end
@testset "Basic types instantiate" begin
@test AbstractBasis isa Type
@test AbstractMesh isa Type
@test AbstractInterfaceMesh isa Type
@test AbstractTopology isa Type
@test AbstractMaterial isa Type
@test AbstractPhysics isa Type
@test AbstractField isa Type
@test AbstractFormulation isa Type
end
@testset "Concrete types exist" begin
@test Mesh isa Type
@test LinearElastic isa Type
@test Hex8 isa Type
@test Tet4 isa Type
@test LocalField isa Type
end
run_api_contract_tests(TOPICS, @__DIR__)
run_pkg_hygiene_tests()
run_inference_smoke_tests()
for topic in _topics_from_args()
include(joinpath(topic, "runtests.jl"))
end
end
# Tests that target the older / Legacy API or experimental specs live under
# `llm/design/legacy-tests/` and are not picked up by this runner.