title: Even Fibonacci Numbers Sum
signature: evenFibonacciNumbersSum :: Integer -> Integer
  evenFibonacciNumbersSum limit = 
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 limit expected = do
      if (validateSolution (PLACEHOLDER_FN_NAME limit) expected)
          then "PASSED"
      else "FAILED"
  
  main = do
      printf "TEST-0...%s\n" (driver (67) (44) )
  
      printf "TEST-1...%s\n" (driver (89) (44) )
  
      printf "TEST-2...%s\n" (driver (12) (10) )
  
      printf "TEST-3...%s\n" (driver (94) (44) )
  
      printf "TEST-4...%s\n" (driver (96) (44) )
  
      printf "TEST-5...%s\n" (driver (25) (10) )
  
      printf "TEST-6...%s\n" (driver (49) (44) )
  
      printf "TEST-7...%s\n" (driver (8) (10) )
  
      printf "TEST-8...%s\n" (driver (33) (10) )
  
      printf "TEST-9...%s\n" (driver (59) (44) )
  
source_py: def even_fibonacci_numbers_sum(limit):
      if (limit < 2):
          return 0
      ef1 = 0
      ef2 = 2
      sm = (ef1 + ef2)
      while (ef2 <= limit):
          ef3 = ((4 * ef2) + ef1)
          if (ef3 > limit):
              break
          ef1 = ef2
          ef2 = ef3
          sm = (sm + ef2)
      return sm
source_cpp: int even_fibonacci_numbers_sum(int limit) {
    if ( limit < 2 ) return 0;
    long long int ef1 = 0, ef2 = 2;
    long long int sum = ef1 + ef2;
    while ( ef2 <= limit ) {
      long long int ef3 = 4 * ef2 + ef1;
      if ( ef3 > limit ) break;
      ef1 = ef2;
      ef2 = ef3;
      sum += ef2;
    }
    return sum;
  }