Changeset 4556

Show
Ignore:
Timestamp:
04/22/09 21:25:43 (4 years ago)
Author:
getxsick
Message:

#303 fixed.
added optional argument 'chunk_amount' for split_number_into_chunks() function.
this argument set expected number of chunks. if a value is lower than minimum
needed of chunks, then UMPAException is raised.

also, added extra tests for this.

Location:
branch/UMPA
Files:
3 modified

Legend:

Unmodified
Added
Removed
  • branch/UMPA/tests/unit/test_utils/test_bits.py

    r4553 r4556  
    4444        assert split_number_into_chunks(0xFFFFF,4) == [0xF, 0xF, 0xF, 0xF, 0xF] 
    4545        assert split_number_into_chunks(0xFFFFF, 5) == [0x1F, 0x1F, 0x1F, 0x1F] 
     46 
     47    def test_amount(self): 
     48        assert split_number_into_chunks(0xFFFF,chunk_amount=3) == [0,0xFF,0xFF] 
     49        assert split_number_into_chunks(0xFFFF, 16, 2) == [0, 0xFFFF] 
     50 
     51        py.test.raises(UMPAException, split_number_into_chunks, 0xF, 1, 1) 
  • branch/UMPA/umpa/_packets.py

    r4540 r4556  
    170170        # we make it because we need string for socket object 
    171171        # so after that we pack it by struct module.pack() 
    172         byte_chunks = umpa.utils.bits.split_number_into_chunks(self.raw) 
     172        byte_chunks = umpa.utils.bits.split_number_into_chunks( 
     173                                        self.raw, chunk_amount=self.bits/BYTE) 
    173174        return struct.pack('!' + 'B'*(self.bits/BYTE), *byte_chunks) 
    174175 
  • branch/UMPA/umpa/utils/bits.py

    r4540 r4556  
    2424""" 
    2525 
     26from umpa.utils.exceptions import UMPAException 
     27 
    2628BYTE = 8 
    2729 
    28 def split_number_into_chunks(number, chunk_size=BYTE): 
     30def split_number_into_chunks(number, chunk_size=BYTE, chunk_amount=None): 
    2931    """ 
    3032    Split the big number into small chunks. 
     
    4547        chunks.append(number & mask) 
    4648        number >>= chunk_size 
     49 
     50    if chunk_amount is not None: 
     51        extend_zero = chunk_amount - len(chunks) 
     52        if extend_zero < 0: 
     53            raise UMPAException("Wrong amount of requested chunks. Requested " 
     54                                "%d, minimum %d." % (chunk_amount,len(chunks))) 
     55        chunks.extend([0]*extend_zero) 
     56 
    4757    chunks.reverse() 
    4858    return chunks