Change BitSequence comparison to use int value & pad bytes in tobytes() #255
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This is a fix for issue #253 (BitSequence having erroneous comparison functions) as well as issue #245 (
tobytes()
should pad to byte length), since they both affect the test cases in tests/bits.py. A few more test cases have also been added.Changes:
_cmp()
now compares sequences based on their int value (more about this below)tobytes()
appends 0 before the MSB so that the sequence length is a multiple of 8.tobytes()
should now return bytes that can be used byint.from_bytes()
to get the int value of the original sequence.The comparison methods being changed to use int value worked fine for BitSequence, however BitZSequence also uses the same
_cmp()
function which did not work because they cannot be converted to int. I wasn't sure how to fix this, so I added a function to calculate "int" value of BitZSequences by treating them as ternary strings (they cannot be compared with another BitSequence if they have Z bits, however)