Mercurial > octave
changeset 28423:da4017484f19 stable
parseparams.m: Fix case sensitivity bug with default inputs (bug #58533).
* parseparams.m: Use toupper() on default names before calling sort() so that
table input to lookup() is always sorted. Add BIST test for bug #58533.
author | Rik <rik@octave.org> |
---|---|
date | Tue, 09 Jun 2020 14:10:41 -0700 |
parents | 19f4126d26cb |
children | f5c9bb5955e7 a5be4fc661d6 |
files | scripts/miscellaneous/parseparams.m |
diffstat | 1 files changed, 7 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/scripts/miscellaneous/parseparams.m Sun Jun 07 10:58:03 2020 +0200 +++ b/scripts/miscellaneous/parseparams.m Tue Jun 09 14:10:41 2020 -0700 @@ -85,7 +85,7 @@ if (! size_equal (names, defaults)) error ("parseparams: needs odd number of arguments"); endif - [names, sidx] = sort (names); + [names, sidx] = sort (toupper (names)); varargout = defaults; if (i) @@ -95,7 +95,7 @@ if (! size_equal (pnames, values) || ! all (strs(i:2:end))) error_as_caller ("options must be given as name-value pairs"); endif - idx = lookup (toupper (names), toupper (pnames), "m"); + idx = lookup (names, toupper (pnames), "m"); if (! all (idx)) error_as_caller ("unrecognized option: %s", pnames{find (idx == 0, 1)}); else @@ -129,6 +129,11 @@ %! [reg, prop1] = parseparams ({"linewidth", 5}, "linewidth", 10); %! assert (isempty (reg)); %! assert (prop1, 5); +%!test <*58533> +%! [foo, bar1, bar2] = parseparams({ 0, "model", 1, "N", 2},"model", 4, "N", 5, "d", 6); +%! assert (foo, {0}); +%! assert (bar1, 1); +%! assert (bar2, 2); %!error <needs odd number of arguments> parseparams ({1}, "linewidth") %!error <must be given as name-value pairs> parseparams ({1, "color"}, "linewidth", 5)