Test Bit
by Isai Damier

#======================================================================
# Author: Isai Damier
# Title: Test Bit
# Project: geekviewpoint
# Package: algorithms
#
# Statement:
#   Given a bit sequence, indicate whether the kth bit is set.
#   The zeroth (0th) bit is the least significant
#    (rightmost) bit.
#
# Sample Input:  0010010010, 4
# Sample Output: true
#
# Technical Details: Let x = 0010010010. Then only the 1st, 4th,
#    and the 7th bits are set. Therefore, testBit(x,4) would return
#    TRUE while testBit(x,2) would return FALSE.
#
#     testBit is a three steps operation:
#     step_1] Using the shift-left operator << create a bit
#         sequence where only the kth bit is set.
#     step_2] Take the bitwise AND of x and the sequence in step_1.
#         This operation will force clear all the bits in x; except
#         the kth bit. It leaves the kth bit unchanged.
#     step_3] Compare the result of step_2 to zero (0). This step
#          is effectively comparing the kth bit to zero.
#====================================================================== 
 def testBit( x, kth ):
  return ( x & 1 << kth ) != 0
import unittest
from algorithms import bitwise as bits

class Test( unittest.TestCase ):

    def testTestBit( self ):
        s = "0010010010";
        length = len( s ) - 1;
        x = int( s, 2 );
        for i in range( length, 0, -1 ):
          if ( s[i] == '1' ):
            self.assertTrue( bits.testBit( x, length - i ) )
          else:
            self.assertFalse( bits.testBit( x, length - i ) )