changeset 9307:7b6980185ff5 octave-forge

quaternion_oo: more informative error messages
author paramaniac
date Sat, 31 Dec 2011 07:45:55 +0000
parents 7e68bce1112a
children a92b9dc3179e
files extra/quaternion_oo/inst/@quaternion/subsasgn.m extra/quaternion_oo/inst/@quaternion/subsref.m
diffstat 2 files changed, 12 insertions(+), 11 deletions(-) [+]
line wrap: on
line diff
--- a/extra/quaternion_oo/inst/@quaternion/subsasgn.m	Fri Dec 30 16:42:50 2011 +0000
+++ b/extra/quaternion_oo/inst/@quaternion/subsasgn.m	Sat Dec 31 07:45:55 2011 +0000
@@ -24,10 +24,10 @@
 function q = subsasgn (q, idx, val)
 
   switch (idx(1).type)
-    case "()"
-      if (length (idx(1).subs) == 1 && isa (q, "quaternion"))  # required by horzcat, vertcat, cat, ...
-        q(idx(1).subs{:}) = val;
-      else                                                     # general case
+    case "()"                                                   # q(...) = val
+      if (length (idx(1).subs) == 1 && isa (q, "quaternion"))   # required by horzcat, vertcat, cat, ...
+        q(idx(1).subs{:}) = val;                                # q = cellfun (@quaternion, varargin)
+      else                                                      # general case
         val = quaternion (val);
         w = subsasgn (q.w, idx, val.w);
         x = subsasgn (q.x, idx, val.x);
@@ -36,12 +36,13 @@
         q = quaternion (w, x, y, z);
       endif
 
-    case "."
+    case "."                                                    # q.w = val
       if (! is_real_array (val))
-        error ("quaternion: subsasgn: invalid type");
+        error ("quaternion: subsasgn: invalid argument type, require real array");
       endif
       if (! size_equal (subsref (q.w, idx(2:end)), val))
-        error ("quaternion: subsasgn: invalid size");
+        error ("quaternion: subsasgn: invalid argument size [%s], require dimensions [%s]", \
+               num2str (size (val), "%d "), num2str (size (subsref (q.w, idx(2:end))), "%d "));
       endif
       switch (tolower (idx(1).subs))
         case {"w", "s"}
@@ -53,11 +54,11 @@
         case {"z", "k"}
           q.z = subsasgn (q.z, idx(2:end), val);
         otherwise
-          error ("quaternion: subsasgn: invalid subscript name");
+          error ("quaternion: subsasgn: invalid subscript name '%s'", idx(1).subs);
       endswitch
 
     otherwise
-      error ("quaternion: subsasgn: under construction");
+      error ("quaternion: subsasgn: invalid subscript type '%s'", idx(1).type);
   endswitch
 
 endfunction
--- a/extra/quaternion_oo/inst/@quaternion/subsref.m	Fri Dec 30 16:42:50 2011 +0000
+++ b/extra/quaternion_oo/inst/@quaternion/subsref.m	Sat Dec 31 07:45:55 2011 +0000
@@ -37,7 +37,7 @@
           q.w = zeros (size (q.w));
           ret = subsref (q, s(2:end));
         otherwise
-          error ("quaternion: invalid subscript name");
+          error ("quaternion: invalid subscript name '%s'", s(1).subs);
       endswitch
 
     case "()"                               # q(...)
@@ -48,7 +48,7 @@
       ret = quaternion (w, x, y, z);
       
     otherwise
-      error ("quaternion: invalid subscript type");
+      error ("quaternion: invalid subscript type '%s'", s(1).type);
   endswitch
 
 endfunction