@@ -72,3 +72,34 @@ def test_causal_doZ_is_rung2():
7272def test_consensus_conflict_forces_review ():
7373 assert fuse ('CONFLICT' , 0.99 ) == 'MANUAL_REVIEW'
7474 assert fuse ('CONFIRMED' , 0.99 ) == 'HIGH_CONFIDENCE'
75+
76+
77+ # ── gear domain (cross-domain universality) ──────────────────────────────────
78+
79+
80+ def test_gear_mesh_frequency_math ():
81+ from cnsd .physics .gear import gear_mesh_frequencies
82+
83+ gf = gear_mesh_frequencies (1800 , 20 ) # 20 teeth at 1800 rpm (30 Hz)
84+ assert abs (gf ['GMF' ] - 600.0 ) < 0.1
85+ assert abs (gf ['shaft_input' ] - 30.0 ) < 0.1
86+
87+
88+ def test_gear_provider_implements_interface ():
89+ from cnsd .physics .providers .base import PhysicsProvider
90+ from cnsd .physics .providers .gear import GearProvider
91+
92+ p = GearProvider (n_teeth_input = 20 , cond_to_rpm = {0 : 1800 }, fs = 5120 )
93+ assert isinstance (p , PhysicsProvider )
94+ sig = np .sin (2 * np .pi * 600 * np .arange (2048 ) / 5120 ) + 0.1 * np .random .randn (2048 )
95+ ev = p .evidence (sig , 0 )
96+ assert 'family_strength' in ev and 'frequencies_hz' in ev
97+ assert p .dominant_family (ev ) in p .families
98+
99+
100+ def test_gear_registered ():
101+ from cnsd .physics .providers import available_domains , get_provider
102+ from cnsd .physics .providers .gear import GearProvider
103+
104+ assert get_provider ('gear' ) is GearProvider
105+ assert 'gear' in available_domains ()
0 commit comments