Bug 12592: Scilab hung with plot(-0) 20/12620/3
Calixte DENIZET [Fri, 20 Sep 2013 11:42:12 +0000 (13:42 +0200)]
Change-Id: I6e574dbaba1c5690eea295aacb158d5657766689

scilab/CHANGES_5.5.X
scilab/modules/graphic_objects/src/java/org/scilab/modules/graphic_objects/axes/Axes.java
scilab/modules/graphics/tests/nonreg_tests/bug_12592.dia.ref [new file with mode: 0644]
scilab/modules/graphics/tests/nonreg_tests/bug_12592.tst [new file with mode: 0644]
scilab/modules/scirenderer/src/org/scilab/forge/scirenderer/ruler/RulerDrawer.java

index df8e7ab..2cfde95 100644 (file)
@@ -600,6 +600,8 @@ Bug Fixes
 
 * Bug #12589 fixed - Call sequence for spzeros & spones were missing in the French help pages.
 
+* Bug #12592 fixed - Scilab hung with plot(-0).
+
 * Bug #12593 fixed - A wrong error message was returned when running genlib with an error in the sci file.
 
 * Bug #12600 fixed - mput did not manage unsigned integer.
index d4bf74c..70c26af 100644 (file)
@@ -1912,8 +1912,7 @@ public class Axes extends GraphicObject {
      */
     public Double[] getMaximalDisplayedBounds() {
         Double[] bounds = getDataBounds();
-
-        boolean eq = bounds[0].equals(bounds[1]);
+        boolean eq = bounds[0].doubleValue() == bounds[1].doubleValue();
         if (getXAxisLogFlag()) {
             bounds[0] = Math.log10(bounds[0]);
             bounds[1] = Math.log10(bounds[1]);
@@ -1932,7 +1931,7 @@ public class Axes extends GraphicObject {
             }
         }
 
-        eq = bounds[2].equals(bounds[3]);
+        eq = bounds[2].doubleValue() == bounds[3].doubleValue();
         if (getYAxisLogFlag()) {
             bounds[2] = Math.log10(bounds[2]);
             bounds[3] = Math.log10(bounds[3]);
@@ -1950,7 +1949,7 @@ public class Axes extends GraphicObject {
             }
         }
 
-        eq = bounds[4].equals(bounds[5]);
+        eq = bounds[4].doubleValue() == bounds[5].doubleValue();
         if (getZAxisLogFlag()) {
             bounds[4] = Math.log10(bounds[4]);
             bounds[5] = Math.log10(bounds[5]);
diff --git a/scilab/modules/graphics/tests/nonreg_tests/bug_12592.dia.ref b/scilab/modules/graphics/tests/nonreg_tests/bug_12592.dia.ref
new file mode 100644 (file)
index 0000000..e34eac7
--- /dev/null
@@ -0,0 +1,17 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2013 - Scilab Enterprises - Calixte DENIZET
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+// <-- TEST WITH GRAPHIC -->
+// <-- Non-regression test for bug 12592 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/12592
+//
+// <-- Short Description -->
+// Scilab hung with plot(-0)
+f = gcf();
+plot(-0);
+delete(f);
diff --git a/scilab/modules/graphics/tests/nonreg_tests/bug_12592.tst b/scilab/modules/graphics/tests/nonreg_tests/bug_12592.tst
new file mode 100644 (file)
index 0000000..0bd6fcb
--- /dev/null
@@ -0,0 +1,20 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2013 - Scilab Enterprises - Calixte DENIZET
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+
+// <-- TEST WITH GRAPHIC -->
+
+// <-- Non-regression test for bug 12592 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/12592
+//
+// <-- Short Description -->
+// Scilab hung with plot(-0)
+
+f = gcf();
+plot(-0);
+delete(f);
\ No newline at end of file
index 2286c8f..33d91de 100644 (file)
@@ -209,6 +209,7 @@ public class RulerDrawer {
             windowSubTicksDelta = normalizedProjectedTicksDirection.times(rulerModel.getSubTicksLength());
             windowTicksDelta = normalizedProjectedTicksDirection.times(rulerModel.getTicksLength());
 
+
             DecimalFormat format;
             if (rulerModel.isAutoTicks()) {
                 format = computeAutoGraduation();
@@ -457,8 +458,9 @@ public class RulerDrawer {
          */
         private boolean collide(List<PositionedSprite> spritesList, double margin) {
             for (int i = 0; i < spritesList.size(); i++) {
+                Rectangle2D bounds = spritesList.get(i).getWindowBounds();
                 for (int j = i + 1; j < spritesList.size(); j++) {
-                    if (collide(spritesList.get(i).getWindowBounds(), spritesList.get(j).getWindowBounds(), margin)) {
+                    if (collide(bounds, spritesList.get(j).getWindowBounds(), margin)) {
                         return true;
                     }
                 }
@@ -475,8 +477,9 @@ public class RulerDrawer {
          */
         private boolean collide(List<PositionedSprite> spritesList, List<PositionedSprite> newSpritesList, double margin) {
             for (PositionedSprite sprite1 : newSpritesList) {
+                Rectangle2D bounds = sprite1.getWindowBounds();
                 for (PositionedSprite sprite2 : spritesList) {
-                    if (collide(sprite1.getWindowBounds(), sprite2.getWindowBounds(), margin)) {
+                    if (collide(bounds, sprite2.getWindowBounds(), margin)) {
                         return true;
                     }
                 }