Skip to content

Commit 03af778

Browse files
SineStrikerclaude
andcommitted
test: cover the linguist domain end to end and lint declarations with the loader's rules
The tests cover the identity fields and the singer language map, the executive tree and the session, and record the verdict of the loader for every test package in loader-verdicts.json. check-declarations.py applies the rules of the loader to a package before it is published, and its self tests require that every package the loader rejects is also rejected by the lint. The end-to-end tests convert with the converted language packages and run a host flow over a voicebank fixture. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
1 parent 8ef560b commit 03af778

78 files changed

Lines changed: 4297 additions & 61 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎CMakeLists.txt‎

Lines changed: 31 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
cmake_minimum_required(VERSION 3.19)
22

3-
# 0.1.0.0 carries the first batch of changes to public value types — LanguageStatus grew a
4-
# reachable depth and a coverage report, and the pipeline extension grew two virtuals. None of that
5-
# is ABI compatible with 0.0.1.0, and wolf makes no ABI promise before 1.0, so the number moves
6-
# with the change rather than after it. See README, "Versioning and ABI".
3+
# 0.1.0.0 contains the first set of changes to public value types: LanguageStatus gained a
4+
# reachable depth and a coverage report, and the pipeline extension gained two virtual functions.
5+
# These changes are not ABI compatible with 0.0.1.0. Versions before 1.0 carry no ABI guarantee, so
6+
# the version is raised together with the change. See README, "Versioning and ABI".
77
project(wolf
88
VERSION 0.1.0.0
99
LANGUAGES CXX
@@ -72,10 +72,10 @@ find_package(re2 CONFIG REQUIRED)
7272
# ----------------------------------
7373
# Optional inference backend
7474
# ----------------------------------
75-
# The model backed G2P variant runs its models through dsinfer's driver framework. dsinfer is
76-
# built by synthrt[onnx] and installs its own CMake package beside synthrt's, so it is found the
77-
# ordinary way. It is optional, and it can be refused even when it is installed: without that
78-
# there is no supported way to ask for the minimal build.
75+
# The model-backed G2P variant runs its models through the driver framework of dsinfer.
76+
# synthrt[onnx] builds dsinfer, which installs its own CMake package beside the synthrt package, so
77+
# find_package locates it. dsinfer is optional, and WOLF_DISABLE_DSINFER excludes it even if it is
78+
# installed; this option is the supported way to request the minimal build.
7979
option(WOLF_DISABLE_DSINFER "Build without dsinfer even if it is installed" OFF)
8080
option(WOLF_DISABLE_LUAJIT "Build without LuaJIT even if it is installed" OFF)
8181

@@ -86,12 +86,13 @@ endif()
8686
if(TARGET dsinfer::dsinfer)
8787
set(WOLF_HAS_DSINFER ON)
8888
# The ONNX driver ships as a plugin under lib/plugins beside the library, not as a link
89-
# target. The dsinfer package says where that tree is through DSINFER_PLUGINS_DIR; an older
90-
# package that does not is searched for a lib/plugins/dsinfer tree above its config file,
91-
# which is share/dsinfer in a vcpkg tree and lib/cmake/dsinfer in a plain install. A plugin
92-
# search path holds one subdirectory per plugin, so this is the parent of the onnx directory.
93-
# A vcpkg tree keeps its Debug build under a separate debug/ prefix. Tests hand the directory
94-
# to the driver factory at run time.
89+
# target. The dsinfer package specifies the location of that tree in DSINFER_PLUGINS_DIR. For
90+
# an older package that does not define the variable, the directories above its config file
91+
# are searched for a lib/plugins/dsinfer tree; the config file is in share/dsinfer in a vcpkg
92+
# tree and in lib/cmake/dsinfer in a plain install. A plugin search path contains one
93+
# subdirectory per plugin, so the resulting directory is the parent of the onnx directory. A
94+
# vcpkg tree keeps its Debug build under a separate debug/ prefix. Tests pass the directory to
95+
# the driver factory at run time.
9596
set(_wolf_dsinfer_plugins "")
9697
if(DEFINED DSINFER_PLUGINS_DIR AND IS_DIRECTORY "${DSINFER_PLUGINS_DIR}")
9798
set(_wolf_dsinfer_plugins "${DSINFER_PLUGINS_DIR}")
@@ -115,24 +116,23 @@ if(TARGET dsinfer::dsinfer)
115116
set(WOLF_DSINFER_DRIVER_DIR "${_wolf_dsinfer_plugins}/inferencedrivers")
116117
endif()
117118
else()
118-
message(WARNING "dsinfer was found but its plugin tree was not; the model backed tests "
119-
"will skip for want of a driver")
119+
message(WARNING "dsinfer was found, but its plugin tree was not; the model-backed tests "
120+
"will be skipped because no driver is available")
120121
endif()
121122
message(STATUS "dsinfer: ${dsinfer_DIR}")
122123
else()
123124
set(WOLF_HAS_DSINFER OFF)
124125
if(WOLF_DISABLE_DSINFER)
125-
message(STATUS "dsinfer: disabled; the model backed G2P variant will not be built")
126+
message(STATUS "dsinfer: disabled; the model-backed G2P variant will not be built")
126127
else()
127-
message(STATUS "dsinfer: not found; the model backed G2P variant will not be built "
128+
message(STATUS "dsinfer: not found; the model-backed G2P variant will not be built "
128129
"(install synthrt with the onnx feature to enable it)")
129130
endif()
130131
endif()
131132

132-
# The scripted variants embed LuaJIT, which ships a pkg-config file and no CMake package, so it
133-
# too is located by hand. Its headers live in a versioned subdirectory.
134-
# The versioned subdirectory is what the Unix makefile installs to; the vcpkg port on Windows uses
135-
# a plain luajit directory instead.
133+
# The scripted variants embed LuaJIT, which ships a pkg-config file but no CMake package, so it is
134+
# also located manually. The Unix makefile installs its headers in a versioned subdirectory
135+
# (luajit-2.1); the vcpkg port on Windows uses a plain luajit directory instead.
136136
find_path(WOLF_LUAJIT_INCLUDE_DIR
137137
NAMES lua.hpp
138138
PATH_SUFFIXES luajit-2.1 luajit
@@ -160,8 +160,9 @@ else()
160160
endif()
161161
endif()
162162

163-
# Where the ONNX Runtime payload was deployed, so tests can hand it to the driver. The driver
164-
# loads the library itself at run time, which is why this is a directory and not a link target.
163+
# The directory to which the ONNX Runtime payload was deployed, so that tests can pass it to the
164+
# driver. The driver loads the library at run time, so the value is a directory and not a link
165+
# target.
165166
find_package(onnxruntime-builds CONFIG QUIET)
166167
if(onnxruntime-builds_FOUND)
167168
set(WOLF_ONNXRUNTIME_DIR "${ONNXRUNTIME_BUILDS_RUNTIME_DIR}")
@@ -179,6 +180,11 @@ endif()
179180
set(WOLF_LANG_PACKAGES_SOURCE "" CACHE PATH
180181
"Unpacked language packages to use instead of the wolf-lang-packages port")
181182

183+
# The voicebank-shaped fixture that scripts/make-voicebank-fixture.py generates from those
184+
# packages. Only the host flow test reads it, and that test is skipped if the variable is empty.
185+
set(WOLF_VOICEBANK_FIXTURE_SOURCE "" CACHE PATH
186+
"Generated voicebank fixture for the host flow test")
187+
182188
if(NOT WOLF_LANG_PACKAGES_SOURCE)
183189
find_package(wolf-lang-packages CONFIG QUIET)
184190
if(wolf-lang-packages_FOUND)
@@ -189,7 +195,7 @@ endif()
189195
if(WOLF_LANG_PACKAGES_SOURCE)
190196
message(STATUS "Language packages: ${WOLF_LANG_PACKAGES_SOURCE}")
191197
else()
192-
message(STATUS "Language packages: none; tests that need them will skip")
198+
message(STATUS "Language packages: none; tests that require them will be skipped")
193199
endif()
194200

195201
# ----------------------------------

0 commit comments

Comments
 (0)