title: Smallest Power Of 2 Greater Than Or Equal To N
signature: smallestPowerOf2GreaterThanOrEqualToN :: Integer -> Integer
  smallestPowerOf2GreaterThanOrEqualToN n = 
test_code: import Text.Printf
  import Control.Exception (catch, SomeException)
  import Data.Typeable
  import qualified Data.List as List
  import qualified Data.Map as Map
  import qualified Data.Set as Set
  
  -- SOLUTION CODE
  -- ============================================
  
  PLACEHOLDER_CODE_BODY
  
  -- TESTING CODE 
  -- ============================================
  validateSolution :: Integer -> Integer -> Bool
  validateSolution actual expected = do
      actual == expected
  
  
  driver :: Integer -> Integer -> String
  driver n expected = do
      if (validateSolution (PLACEHOLDER_FN_NAME n) expected)
          then "PASSED"
      else "FAILED"
  
  main = do
      printf "TEST-0...%s\n" (driver (13) (16) )
  
      printf "TEST-1...%s\n" (driver (27) (32) )
  
      printf "TEST-2...%s\n" (driver (1) (1) )
  
      printf "TEST-3...%s\n" (driver (24) (32) )
  
      printf "TEST-4...%s\n" (driver (98) (128) )
  
      printf "TEST-5...%s\n" (driver (94) (128) )
  
      printf "TEST-6...%s\n" (driver (36) (64) )
  
      printf "TEST-7...%s\n" (driver (41) (64) )
  
      printf "TEST-8...%s\n" (driver (74) (128) )
  
      printf "TEST-9...%s\n" (driver (39) (64) )
  
source_py: def smallest_power_of_2_greater_than_or_equal_to_n(n):
      count = 0
      if (n and (not (n & (n - 1)))):
          return n
      while (n != 0):
          n >>= 1
          count += 1
      return (1 << count)
source_cpp: unsigned int smallest_power_of_2_greater_than_or_equal_to_n(unsigned int n) {
    unsigned count = 0;
    if ( n && ! ( n & ( n - 1 ) ) ) return n;
    while ( n != 0 ) {
      n >>= 1;
      count += 1;
    }
    return 1 << count;
  }