feat: add V3 field fixtures and RN regression host
Some checks failed
validate-scripts / validate-scripts (push) Has been cancelled

This commit is contained in:
OpenAI Codex
2026-09-11 09:56:53 +08:00
parent 3b01275983
commit 8588e6fcb8
61 changed files with 1939 additions and 39 deletions

View File

@@ -357,6 +357,26 @@ TEST(Source, ParticleFieldV3V2DecodesAllSupportedChannelCombinations) {
EXPECT_TRUE(combined.snapshot->hasVector());
}
TEST(Source, ParticleFieldV3BusinessFixtureShapesRemainProviderNeutral) {
// These are the exact four offline-business shapes used by STEP-070 fixtures:
// Wind/Tide are velocity vectors, Rain is scalar-only, and Wave is scalar+direction.
const std::vector<char> valid{1, 1};
const auto wind = particle::LocalParticleFieldFeed::load(v2Metadata(false, true, "VELOCITY"),
v2Payload(std::nullopt, floatBytes({1, 2, 3, 4}), valid));
const auto tide = particle::LocalParticleFieldFeed::load(v2Metadata(false, true, "VELOCITY"),
v2Payload(std::nullopt, floatBytes({0.1f, 0.2f, 0.3f, 0.4f}), valid));
const auto rain = particle::LocalParticleFieldFeed::load(v2Metadata(true, false),
v2Payload(floatBytes({1, 2}), std::nullopt, valid));
const auto wave = particle::LocalParticleFieldFeed::load(v2Metadata(true, true, "DIRECTION"),
v2Payload(floatBytes({1, 9}), floatBytes({0, 1, 0, 1}), valid));
ASSERT_TRUE(wind) << wind.message; ASSERT_TRUE(tide) << tide.message;
ASSERT_TRUE(rain) << rain.message; ASSERT_TRUE(wave) << wave.message;
EXPECT_EQ(wave.snapshot->vectorSemantics, particle::VectorSemantics::Direction);
EXPECT_FALSE(rain.snapshot->hasVector());
EXPECT_TRUE(wind.snapshot->isTimeInterpolationCompatibleWith(*tide.snapshot));
EXPECT_FALSE(wind.snapshot->isTimeInterpolationCompatibleWith(*wave.snapshot));
}
TEST(Source, ParticleFieldV3V2RejectsInvalidPlaneAndSemanticsContracts) {
const std::vector<char> valid{1, 1};
auto neither = particle::LocalParticleFieldFeed::load(v2Metadata(false, false), v2Payload(std::nullopt, std::nullopt, valid));