comparison between sparse corrected. 35/11435/2
Cedric Delamarre [Thu, 2 May 2013 09:58:01 +0000 (11:58 +0200)]
a = sparse(rand(6,6))
b = sparse(rand(6,5))
a == b
a <> b

Change-Id: I526c4b412e236133c65f99234f55d26527c49edc

scilab/modules/operations/src/cpp/types_comparison_eq.cpp
scilab/modules/operations/src/cpp/types_comparison_ne.cpp

index c54b20f..50d70a5 100644 (file)
@@ -751,10 +751,12 @@ int EqualToSparseAndSparse(Sparse* _pSparse1, Sparse* _pSparse2, GenericType** _
             || _pSparse1->isScalar() || _pSparse2->isScalar()) //scalar cases
     {
         *_pOut = _pSparse1->newEqualTo(*_pSparse2);
-        return 0;
     }
-
-    return 1;
+    else
+    {
+        *_pOut = new Bool(false);
+    }
+    return 0;
 }
 
 int EqualToDoubleAndSparse(Double* _pDouble, Sparse* _pSparse, GenericType** _pOut)
index 68174d4..137fdf3 100644 (file)
@@ -18,14 +18,14 @@ using namespace types;
 
 InternalType *GenericComparisonNonEqual(InternalType *_pLeftOperand, InternalType *_pRightOperand)
 {
-    if(_pLeftOperand->isSparse() && _pRightOperand->isSparse())
+    if (_pLeftOperand->isSparse() && _pRightOperand->isSparse())
     {
         InternalType *pResult = NULL;
         Sparse* pL = _pLeftOperand->getAs<Sparse>();
         Sparse* pR = _pRightOperand->getAs<Sparse>();
 
         int iResult = NotEqualToSparseAndSparse(pL, pR, (GenericType**)&pResult);
-        if(iResult)
+        if (iResult)
         {
             throw ast::ScilabError(_W("Inconsistent row/column dimensions.\n"));
         }
@@ -35,26 +35,27 @@ InternalType *GenericComparisonNonEqual(InternalType *_pLeftOperand, InternalTyp
     else
     {
         InternalType* pResult = GenericComparisonEqual(_pLeftOperand, _pRightOperand);
-        if(pResult == NULL)
-        {//to call overloading
+        if (pResult == NULL)
+        {
+            //to call overloading
             return NULL;
         }
 
-        if(pResult->isBool())
+        if (pResult->isBool())
         {
             Bool *pB = pResult->getAs<Bool>();
-            for(int i = 0 ; i < pB->getSize() ; i++)
+            for (int i = 0 ; i < pB->getSize() ; i++)
             {
                 pB->set(i, pB->get(i) == 0);
             }
             return pB;
         }
-        else if(pResult->isSparseBool())
+        else if (pResult->isSparseBool())
         {
             SparseBool *pSB = pResult->getAs<SparseBool>();
-            for(int i = 0 ; i < pSB->getRows() ; i++)
+            for (int i = 0 ; i < pSB->getRows() ; i++)
             {
-                for(int j = 0 ; j < pSB->getCols() ; j++)
+                for (int j = 0 ; j < pSB->getCols() ; j++)
                 {
                     bool b = !pSB->get(i, j);
                     pSB->set(i, j, !pSB->get(i, j));
@@ -69,12 +70,15 @@ InternalType *GenericComparisonNonEqual(InternalType *_pLeftOperand, InternalTyp
 
 int NotEqualToSparseAndSparse(Sparse* _pSparse1, Sparse* _pSparse2, GenericType** _pOut)
 {
-    if((_pSparse1->getRows() == _pSparse2->getRows() && _pSparse1->getCols() == _pSparse2->getCols()) //matrix case
-        || _pSparse1->isScalar() || _pSparse2->isScalar()) //scalar cases
+    if ((_pSparse1->getRows() == _pSparse2->getRows() && _pSparse1->getCols() == _pSparse2->getCols()) //matrix case
+            || _pSparse1->isScalar() || _pSparse2->isScalar()) //scalar cases
     {
         *_pOut = _pSparse1->newNotEqualTo(*_pSparse2);
-        return 0;
+    }
+    else
+    {
+        *_pOut = new Bool(true);
     }
 
-    return 1;
+    return 0;
 }