view test/bug-45969.tst @ 31260:c5c8bf50449c

Improve performance of isfield from linear time to constant time (bug #58105) Patch author: Anonymous in Bug #58105 Comment #7 https://savannah.gnu.org/bugs/index.php?58105#comment7 The isfield function was taking time proportional to the number of fields in a struct to determine whether something was a member or not. With this change, isfield performance becomes constant irrespective of the number of fields, speeding up performance by over 200X, and also allowing the use of struct as a hashmap if the user desires. ov-base.h: Add new isfield function declaration ov-base.cc: Add new isfield function definition ov-struct.h: Add new isfield function definitions ov-struct.cc: Do not call map_value ov.h: Add new isfield function definition
author Arun Giridhar <arungiridhar@gmail.com>
date Wed, 05 Oct 2022 10:35:31 -0400
parents 9080316864bf
children
line wrap: on
line source

%!test <*45969>
%! text_filename = tempname ();
%! binary_filename = tempname ();
%! a = 2;
%! b = 10;
%! c = 20;
%! f1 = @ (f, x) f (x) + a;
%! f2 = @ (y) f1 (@ (z) z^2 + b * y, y) + c;
%! f2_arg = 5;
%! save_default_options ("-text", "local");
%! unwind_protect
%!   save (text_filename, "f2");
%!   save ("-binary", binary_filename, "f2");
%!   text = load (text_filename);
%!   binary = load (binary_filename);
%!   assert (f2 (f2_arg), text.f2 (f2_arg));
%!   assert (f2 (f2_arg), binary.f2 (f2_arg));
%! unwind_protect_cleanup
%!   unlink (text_filename);
%!   unlink (binary_filename);
%! end_unwind_protect

%!testif HAVE_HDF5 <*45969>
%! hdf5_filename = tempname ();
%! a = 2;
%! b = 10;
%! c = 20;
%! f1 = @ (f, x) f (x) + a;
%! f2 = @ (y) f1 (@ (z) z^2 + b * y, y) + c;
%! f2_arg = 5;
%! save_default_options ("-text", "local");
%! unwind_protect
%!   save ("-hdf5", hdf5_filename, "f2");
%!   hdf5 = load (hdf5_filename);
%!   assert (f2 (f2_arg), hdf5.f2 (f2_arg));
%! unwind_protect_cleanup
%!   unlink (hdf5_filename);
%! end_unwind_protect