From 58a0a7d0d6052901cd8745902c79fa1a49266206 Mon Sep 17 00:00:00 2001
From: Piotr Mitros <pmitros@mitx.mit.edu>
Date: Tue, 24 Apr 2012 18:27:54 -0400
Subject: [PATCH] Case sensitivity bug fix

---
 djangoapps/courseware/capa/calc.py | 17 ++++++++++++-----
 djangoapps/courseware/tests.py     |  5 +++++
 2 files changed, 17 insertions(+), 5 deletions(-)

diff --git a/djangoapps/courseware/capa/calc.py b/djangoapps/courseware/capa/calc.py
index fb64c581397..6aa0563426f 100644
--- a/djangoapps/courseware/capa/calc.py
+++ b/djangoapps/courseware/capa/calc.py
@@ -78,17 +78,24 @@ def evaluator(variables, functions, string, cs=False):
     # log.debug("functions: {0}".format(functions))
     # log.debug("string: {0}".format(string))
 
+    def lower_dict(d):
+        print d
+        return dict([(k.lower(), d[k]) for k in d])
+
     all_variables = copy.copy(default_variables)
-    all_variables.update(variables)
     all_functions = copy.copy(default_functions)
+
+    if not cs: 
+        all_variables = lower_dict(all_variables)
+        all_functions = lower_dict(all_functions)
+
+    all_variables.update(variables)    
     all_functions.update(functions)
     
     if not cs: 
         string_cs = string.lower()
-        for v in all_variables.keys():
-            all_variables[v.lower()]=all_variables[v]
-        for f in all_functions.keys():
-            all_functions[f.lower()]=all_functions[f]
+        all_functions = lower_dict(all_functions)
+        all_variables = lower_dict(all_variables)
         CasedLiteral = CaselessLiteral 
     else:
         string_cs = string
diff --git a/djangoapps/courseware/tests.py b/djangoapps/courseware/tests.py
index 7eb6aa27dee..7a63b9a75f3 100644
--- a/djangoapps/courseware/tests.py
+++ b/djangoapps/courseware/tests.py
@@ -33,6 +33,11 @@ class ModelsTest(unittest.TestCase):
         self.assertTrue(abs(calc.evaluator(variables, functions, "k*T/q-0.025"))<0.001)
         self.assertTrue(abs(calc.evaluator(variables, functions, "e^(j*pi)")+1)<0.00001)
         self.assertTrue(abs(calc.evaluator(variables, functions, "j||1")-0.5-0.5j)<0.00001)
+        variables['t'] = 1.0
+        self.assertTrue(abs(calc.evaluator(variables, functions, "t")-1.0)<0.00001)
+        self.assertTrue(abs(calc.evaluator(variables, functions, "T")-1.0)<0.00001)
+        self.assertTrue(abs(calc.evaluator(variables, functions, "t", cs=True)-1.0)<0.00001)
+        self.assertTrue(abs(calc.evaluator(variables, functions, "T", cs=True)-298)<0.2)
         exception_happened = False
         try: 
             calc.evaluator({},{}, "5+7 QWSEKO")
-- 
GitLab