Rob Austein cca4a4ce8f Cleanup | 8 months ago | |
---|---|---|
.gitignore | 8 months ago | |
README.md | 8 months ago | |
rfc1982_serial_number.py | 8 months ago | |
test1.py | 8 months ago | |
test2.py | 8 months ago |
Run as a program, this takes start and finish serial values and tells you what intermediate steps (if any) are needed to make the specified change.
Used as a module, this implements the Serial
class and an iterator
which returns the intermediate steps (if any) needed between two
Serial
values.
Per the RFC, only two operations are defined on Serial
objects:
addition and comparision, both within a restricted range specified
by the RFC.
The default modulus is 2**32
, you can change this by subclassing the
Serial
class and overriding the modulus
variable in the subclass.
The modulus must be a power of two.
See RFC 1982 for discussion of the ways in which serial numbers do not
work like normal integers. In particular, note that there's a corner
case in which one can have a pair of serial numbers I1
and I2
where I1
is neither equal to, less than, nor greater than I2
.
This is deliberate and is not a bug in the code. See the RFC.
The find_intermediate()
iterator takes two Serial
values start
and finish
and yields the sequence of intermediate values (if any)
needed to step from start
to finish
.
There are also a couple of test programs that use random.randint()
to generate test values. Maybe someday I'll recode with unittest
.