from services.control.exporter_monolith import ( REG178_PASSIVE, _drop_registers_matching_last_verified, ) def test_drop_registers_skips_reg178_when_mask_matches(): # last_verified contains extra bits beyond 0x0030; we still want to skip if bits 4–5 match. registers = [(178, "grid_peak_shaving_switch", REG178_PASSIVE)] last_verified = {178: 12030} # real-world example from home-01 (bits4-5 still == 0b11) out, skipped = _drop_registers_matching_last_verified(registers, last_verified) assert out == [] assert skipped == [178] def test_drop_registers_keeps_reg178_when_mask_differs(): registers = [(178, "grid_peak_shaving_switch", REG178_PASSIVE)] last_verified = {178: 32} # SELL mask 0b10 out, skipped = _drop_registers_matching_last_verified(registers, last_verified) assert out == registers assert skipped == [] def test_drop_registers_keeps_reg179_when_mask_matches_but_not_clean(): registers = [(179, "control_board_special_1", 2)] # want cutoff ON (clean value) last_verified = {179: 0x1236} # bits0–1 still == 2, but not a clean 2/3 value out, skipped = _drop_registers_matching_last_verified(registers, last_verified) assert out == registers assert skipped == [] def test_drop_registers_skips_reg179_when_clean_value_matches(): registers = [(179, "control_board_special_1", 2)] # want cutoff ON (clean value) last_verified = {179: 2} # already clean cutoff ON out, skipped = _drop_registers_matching_last_verified(registers, last_verified) assert out == [] assert skipped == [179] def test_drop_registers_keeps_reg179_when_mask_differs(): registers = [(179, "control_board_special_1", 2)] # want cutoff ON last_verified = {179: 0x1237} # ...0111b => bits0–1 == 3 (cutoff OFF) out, skipped = _drop_registers_matching_last_verified(registers, last_verified) assert out == registers assert skipped == []