changeset 18196:0d5721873d6b

avoid some tests that rely on ordering of enum values * ov-base-sparse.cc (octave_base_sparse<T>::map): Use explicit list of umap_X cases instead of relying on specific ordering of enum values. * ov-float.cc (octave_float_scalar::map): Likewise. * ov-flt-re-mat.cc (octave_float_matrix::map): Likewise. * ov-re-mat.cc (octave_matrix::map): Likewise. * ov-scalar.cc (octave_scalar::map): Likewise.
author John W. Eaton <jwe@octave.org>
date Thu, 02 Jan 2014 23:18:45 -0500
parents 1b6db9303933
children b7d3e1f762e1
files libinterp/octave-value/ov-base-sparse.cc libinterp/octave-value/ov-float.cc libinterp/octave-value/ov-flt-re-mat.cc libinterp/octave-value/ov-re-mat.cc libinterp/octave-value/ov-scalar.cc
diffstat 5 files changed, 115 insertions(+), 50 deletions(-) [+]
line wrap: on
line diff
--- a/libinterp/octave-value/ov-base-sparse.cc	Thu Jan 02 22:44:37 2014 -0500
+++ b/libinterp/octave-value/ov-base-sparse.cc	Thu Jan 02 23:18:45 2014 -0500
@@ -450,25 +450,46 @@
 
   // Sparsify the result if possible.
 
-  // FIXME: intentionally skip this step for string mappers. Is this wanted?
-  // FIXME: this will break if some well-meaning person rearranges the
-  // enum list in ov-base.h.
-  if (umap >= umap_xisalnum && umap <= umap_xtoupper)
-    return retval;
-
-  switch (retval.builtin_type ())
+  switch (umap)
     {
-    case btyp_double:
-      retval = retval.sparse_matrix_value ();
-      break;
-    case btyp_complex:
-      retval = retval.sparse_complex_matrix_value ();
+    case umap_xisalnum:
+    case umap_xisalpha:
+    case umap_xisascii:
+    case umap_xiscntrl:
+    case umap_xisdigit:
+    case umap_xisgraph:
+    case umap_xislower:
+    case umap_xisprint:
+    case umap_xispunct:
+    case umap_xisspace:
+    case umap_xisupper:
+    case umap_xisxdigit:
+    case umap_xsignbit:
+    case umap_xtoascii:
+      // FIXME: intentionally skip this step for string mappers.
+      // Is this wanted?
       break;
-    case btyp_bool:
-      retval = retval.sparse_bool_matrix_value ();
-      break;
+
     default:
-      break;
+      {
+        switch (retval.builtin_type ())
+          {
+          case btyp_double:
+            retval = retval.sparse_matrix_value ();
+            break;
+
+          case btyp_complex:
+            retval = retval.sparse_complex_matrix_value ();
+            break;
+
+          case btyp_bool:
+            retval = retval.sparse_bool_matrix_value ();
+            break;
+
+          default:
+            break;
+          }
+      }
     }
 
   return retval;
--- a/libinterp/octave-value/ov-float.cc	Thu Jan 02 22:44:37 2014 -0500
+++ b/libinterp/octave-value/ov-float.cc	Thu Jan 02 23:18:45 2014 -0500
@@ -332,15 +332,26 @@
     case umap_xtoupper:
       return scalar;
 
+    case umap_xisalnum:
+    case umap_xisalpha:
+    case umap_xisascii:
+    case umap_xiscntrl:
+    case umap_xisdigit:
+    case umap_xisgraph:
+    case umap_xislower:
+    case umap_xisprint:
+    case umap_xispunct:
+    case umap_xisspace:
+    case umap_xisupper:
+    case umap_xisxdigit:
+    case umap_xsignbit:
+    case umap_xtoascii:
+      {
+        octave_value str_conv = convert_to_str (true, true);
+        return error_state ? octave_value () : str_conv.map (umap);
+      }
+
     default:
-      // FIXME: this will break if some well-meaning person rearranges
-      // the enum list in ov-base.h.
-      if (umap >= umap_xisalnum && umap <= umap_xtoupper)
-        {
-          octave_value str_conv = convert_to_str (true, true);
-          return error_state ? octave_value () : str_conv.map (umap);
-        }
-      else
         return octave_base_value::map (umap);
     }
 }
--- a/libinterp/octave-value/ov-flt-re-mat.cc	Thu Jan 02 22:44:37 2014 -0500
+++ b/libinterp/octave-value/ov-flt-re-mat.cc	Thu Jan 02 23:18:45 2014 -0500
@@ -817,16 +817,27 @@
     case umap_xtoupper:
       return matrix;
 
+    case umap_xisalnum:
+    case umap_xisalpha:
+    case umap_xisascii:
+    case umap_xiscntrl:
+    case umap_xisdigit:
+    case umap_xisgraph:
+    case umap_xislower:
+    case umap_xisprint:
+    case umap_xispunct:
+    case umap_xisspace:
+    case umap_xisupper:
+    case umap_xisxdigit:
+    case umap_xsignbit:
+    case umap_xtoascii:
+      {
+        octave_value str_conv = convert_to_str (true, true);
+        return error_state ? octave_value () : str_conv.map (umap);
+      }
+
     default:
-      // FIXME: this will break if some well-meaning person rearranges
-      // the enum list in ov-base.h.
-      if (umap >= umap_xisalnum && umap <= umap_xtoupper)
-        {
-          octave_value str_conv = convert_to_str (true, true);
-          return error_state ? octave_value () : str_conv.map (umap);
-        }
-      else
-        return octave_base_value::map (umap);
+      return octave_base_value::map (umap);
     }
 }
 
--- a/libinterp/octave-value/ov-re-mat.cc	Thu Jan 02 22:44:37 2014 -0500
+++ b/libinterp/octave-value/ov-re-mat.cc	Thu Jan 02 23:18:45 2014 -0500
@@ -940,15 +940,26 @@
     case umap_xtoupper:
       return matrix;
 
+    case umap_xisalnum:
+    case umap_xisalpha:
+    case umap_xisascii:
+    case umap_xiscntrl:
+    case umap_xisdigit:
+    case umap_xisgraph:
+    case umap_xislower:
+    case umap_xisprint:
+    case umap_xispunct:
+    case umap_xisspace:
+    case umap_xisupper:
+    case umap_xisxdigit:
+    case umap_xsignbit:
+    case umap_xtoascii:
+      {
+        octave_value str_conv = convert_to_str (true, true);
+        return error_state ? octave_value () : str_conv.map (umap);
+      }
+
     default:
-      // FIXME: this will break if some well-meaning person rearranges
-      // the enum list in ov-base.h.
-      if (umap >= umap_xisalnum && umap <= umap_xtoupper)
-        {
-          octave_value str_conv = convert_to_str (true, true);
-          return error_state ? octave_value () : str_conv.map (umap);
-        }
-      else
         return octave_base_value::map (umap);
     }
 }
--- a/libinterp/octave-value/ov-scalar.cc	Thu Jan 02 22:44:37 2014 -0500
+++ b/libinterp/octave-value/ov-scalar.cc	Thu Jan 02 23:18:45 2014 -0500
@@ -348,16 +348,27 @@
     case umap_xtoupper:
       return scalar;
 
+    case umap_xisalnum:
+    case umap_xisalpha:
+    case umap_xisascii:
+    case umap_xiscntrl:
+    case umap_xisdigit:
+    case umap_xisgraph:
+    case umap_xislower:
+    case umap_xisprint:
+    case umap_xispunct:
+    case umap_xisspace:
+    case umap_xisupper:
+    case umap_xisxdigit:
+    case umap_xsignbit:
+    case umap_xtoascii:
+      {
+        octave_value str_conv = convert_to_str (true, true);
+        return error_state ? octave_value () : str_conv.map (umap);
+      }
+
     default:
-      // FIXME: this will break if some well-meaning person rearranges
-      // the enum list in ov-base.h.
-      if (umap >= umap_xisalnum && umap <= umap_xtoupper)
-        {
-          octave_value str_conv = convert_to_str (true, true);
-          return error_state ? octave_value () : str_conv.map (umap);
-        }
-      else
-        return octave_base_value::map (umap);
+      return octave_base_value::map (umap);
     }
 }