[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    branches/work/koffice-essen/kspread
From:       Sebastian Sauer <mail () dipe ! org>
Date:       2010-12-03 21:01:48
Message-ID: 20101203210149.04529AC8A4 () svn ! kde ! org
[Download RAW message or body]

SVN commit 1203398 by sebsauer:

apply patch from Juan Aquino to fix the IF function.

Patch for bug 240235, IF function shows wrong result, missing some comparisons \
                between empty and others values.
- Added comparison:
  empty vs integer
  empty vs float
  empty vs boolean, like openoffice and excel.

see http://svn.reviewboard.kde.org/r/5976/
BUG:240235


 M  +15 -0     Value.cpp  
 M  +5 -0      tests/TestLogicFunctions.cpp  


--- branches/work/koffice-essen/kspread/Value.cpp #1203397:1203398
@@ -702,6 +702,9 @@
 
     if ((t1 == Empty) && (t2 == Empty)) return true;
     if ((t1 == Empty) && (t2 == String)) return true;
+    if ((t1 == Empty) && (t2 == Integer)) return true;
+    if ((t1 == Empty) && (t2 == Float)) return true;
+    if ((t1 == Empty) && (t2 == Boolean)) return true;
 
     if ((t1 == Boolean) && (t2 == Boolean)) return true;
     if ((t1 == Boolean) && (t2 == Integer)) return true;
@@ -761,6 +764,18 @@
     if ((t1 == Empty) && (t2 == String))
         return(v.asString().isEmpty()) ? 0 : -1;
 
+    // empty vs integer
+    if ((t1 == Empty) && (t2 == Integer))
+        return -1;
+
+    // empty vs float
+    if ((t1  == Empty) && (t2 == Float))
+        return -1;
+
+    // empty vs boolean
+    if ((t1 == Empty) && (t2 == Boolean))
+        return -1;
+
     // boolean vs boolean
     if ((t1 == Boolean) && (t2 == Boolean)) {
         bool p = asBoolean();
--- branches/work/koffice-essen/kspread/tests/TestLogicFunctions.cpp #1203397:1203398
@@ -125,6 +125,11 @@
     CHECK_EVAL("IF(FALSE();7;A1)", Value(Value::Empty));
     CHECK_EVAL("IF(TRUE();4;1/0)", Value(4));
     CHECK_EVAL("IF(FALSE();1/0;5)", Value(5));
+    // Empty vs *
+    CHECK_EVAL("IF(A1==2;2;4)", Value(4));
+    CHECK_EVAL("IF(A1==2.5;2;4)", Value(4));
+    CHECK_EVAL("IF(A1==TRUE();2;4)", Value(4));
+    CHECK_EVAL("IF(A1==\"BAD\";2;4)", Value(4));
 }
 
 void TestLogicFunctions::testNOT()


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic