From kde-commits Fri Dec 03 21:01:48 2010 From: Sebastian Sauer Date: Fri, 03 Dec 2010 21:01:48 +0000 To: kde-commits Subject: branches/work/koffice-essen/kspread Message-Id: <20101203210149.04529AC8A4 () svn ! kde ! org> X-MARC-Message: https://marc.info/?l=kde-commits&m=129141014405422 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()