Skip to content

Instantly share code, notes, and snippets.

@andy-shev
Last active November 20, 2025 16:43
Show Gist options
  • Select an option

  • Save andy-shev/afe4c0e009cb3008ac613d8384aaa6eb to your computer and use it in GitHub Desktop.

Select an option

Save andy-shev/afe4c0e009cb3008ac613d8384aaa6eb to your computer and use it in GitHub Desktop.
#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
# vim: ts=4 sw=4 et ai si
from __future__ import print_function
import random
import sys
def handle(event, state, bit):
oe = event
if state:
ne = oe | bit
else:
ne = oe & ~bit
return (ne ^ oe) == bit
def handle_and_print(iteration, event, state, bit):
r = handle(event, state, bit)
print(f"[{iteration}] 0x{event:02x} {state and "|" or "&"} 0x{bit:02x} --> {r:d}:", r and "handle" or "return")
def test_event(event, state, bit):
orig = event
print(f"Initial event: 0x{orig:02x}, new state: {state} for bit 0x{bit:02x}")
handle_and_print("-", 0, state, bit)
for iteration in range(0, 8):
handle_and_print(iteration, event, state, bit)
if state:
event |= (1 << iteration)
else:
event &= ~(1 << iteration)
handle_and_print("-", event, state, bit)
def test_events(event, bit):
if event > 0:
test_event(event, False, bit)
if not (event & bit):
test_event(event, True, bit)
def main(argv):
try:
event = int(argv[1], 0)
except:
event = random.randint(0, 255)
try:
bitnum = int(argv[2], 0)
except:
bitnum = random.randint(0, 7)
bit = 1 << bitnum
if (event & bit):
test_event(event, False, bit)
else:
test_event(event, True, bit)
test_events(0, bit)
test_events(bit, bit)
if __name__ == "__main__":
sys.exit(main(sys.argv))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment