summaryrefslogtreecommitdiff
path: root/test/src/fns-tests.el
AgeCommit message (Collapse)Author
2026-05-07; Revert Eric's commits from February.Sean Whitton
These will be resubmitted as patches for review. Revert "Repair another test bollixed by aggressive optimization." This reverts commit 47735e0243ba15a485e1a6f25be53f6e42dafa24. Revert "Repair ab ecal test by making a variable kexical," This reverts commit ca42055b0ca3bba1b635e314f084239f5a205534. Revert "Complete the test set for floatfns,c." This reverts commit 1b0c8d6b95f0704936e4449270a815abb8865c3d. Revert "Tesrts for the portable primitives in fileio.c." This reverts commit a339c6827c0bb1e80de1cfb9c51b4c4b764046bc. Revert "Tests for primitives in coding.c and charset.c." This reverts commit 5749b2e4f4d11dd646892e70f520700e4f0f16f5. Revert "Tests for primitives from the character.c module." This reverts commit b09f8df206aae1e4b70d8961e6693d574aea6a30. Revert "Tests for the lreaf.c amd print.c primitives." This reverts commit d7a3d442b4cdfd88447eec49339dfa5d69342de9. Revert "Tests for remaining functions iun eval.c." This reverts commit cd038e5617ff940ead880fbc9c1df95e61453246. Revert "Completing test coverage for dataa.c orimitives." This reverts commit a6e19d6179ad608688c6edcc2b1f7368c05dff69. Revert "More correctness tesrs for orinitives from fns.c." This reverts commit 40ff4512ad12fd29a5bea887fe77c3bddfa4caec. Revert "More tests for edit functions, buffers, and markers." This reverts commit 67e8f875627e38450a6c713e810dcea2106c6d9c. Revert "Added more buffer/marker/editing test coverage." This reverts commit 3dda4b85e8a66a0c5592197dcc2895d65c04bc51. Revert "Category/charset/coding + char-table tests." This reverts commit 7a93a7b3345f7ae4e8f487b562b19a4b5fed8496. Revert "More test coverage improvements." This reverts commit fc7339c46dc87d5d7051f976206bb5c4d9efdfb8. Revert "More test coverage improvements." This reverts commit 95329bf445841a763bafa4ea5e853fc1c6f6bf0a. Revert "More test coverage improvements for ERT." This reverts commit e42c579a544d3d254e55db2f6b70e55205987d36. Revert "Crrections to tedt coverrage extensuion after bootstrap build." This reverts commit 90af3295c7fa705381bf680ec8559503ea875683. Revert "Improve test coverage of builtin predicates." This reverts commit 6eb170b007a4ad63fe5666033df191f52d480739. Revert "Tests for 2 marker primitives previously not covered." This reverts commit 6d7f0acf9cc15b388f90363d012aaba3d95be6c8. Revert "Tests for 7 editor primitives previously not covered." This reverts commit bb403e70aec25677393d4f37d544487a9aebab9e.
2026-02-25More correctness tesrs for orinitives from fns.c.Eric S. Raymond
2026-02-25More test coverage improvements.Eric S. Raymond
2026-02-24Compare circular lists in 'equal' without error (bug#80456)Mattias Engdegård
* src/lisp.h (FOR_EACH_TAIL_INTERNAL): Divvy up the code into... (FOR_EACH_TAIL_BASIC, FOR_EACH_TAIL_STEP_CYCLEP): ...these macros, so that they can be used in more flexible ways. * src/fns.c (internal_equal_1): Detect circular lists and call... (internal_equal_cycle): ...this function that keeps comparing but now detecting cycles in the other argument. * lisp/emacs-lisp/testcover.el (testcover-after): Remove unnecessary error handling. * test/src/fns-tests.el (test-cycle-equal): Adapt and extend. * test/lisp/emacs-lisp/testcover-resources/testcases.el (testcover-testcase-cyc1): Remove case that no longer applies. * doc/lispref/objects.texi (Equality Predicates): Update. * etc/NEWS: Announce.
2026-02-23Add SHA-3 support to secure-hashCollin Funk
* admin/merge-gnulib (GNULIB_MODULES): Add crypto/sha3-buffer. * lib/sha3.c: New file, imported by running admin/merge-gnulib. * lib/sha3.h: Likewise. * m4/sha3.m4: Likewise. * lib/gnulib.mk.in: Updated by admin/merge-gnulib. * m4/gnulib-comp.m4: Likewise. * src/fns.c: Include sha3.h (Fsecure_hash_algorithms): Add Qsha3_224, Qsha3_256, Qsha3_384, and Qsha3_512. (secure_hash): Likewise. (Fsecure_hash): List the SHA-3 algorithms in the docstring. (syms_of_fns): Define Qsha3_224, Qsha3_256, Qsha3_384, and Qsha3_512. * test/lisp/net/gnutls-tests.el (gnutls-tests-internal-macs-upcased): Filter out the new SHA-3 algorithms since they are currently not implemented in gnutls. * test/src/fns-tests.el (test-secure-hash): Add test cases for the new algorithms. * doc/lispref/text.texi (Checksum/Hash): List the SHA-3 algorithms. Mention that they are considered secure. * etc/NEWS: Mention the new feature.
2026-01-04; Fix simple logic in OpenBSD's random testManuel Giraud
* test/src/fns-tests.el (fns-tests-random): Do not test on OpenBSD since either equal or not equal is a valid result here. (Bug#80125)
2026-01-01; Add 2026 to copyright years.Sean Whitton
2025-10-18Add a test for puthashHelmut Eller
It's actually for a bug on the feature/igc branch. * test/src/fns-tests.el (ft-puthash-weak): New test (ft--puthash-weak): New helper.
2025-10-17Add some tests for weak hashtablesHelmut Eller
Also add ft- as shorthand for fns-tests-. * test/src/fns-tests.el (ft-hash-table-weakness, ft-weak-key-removal) (ft-weak-value-removal, ft-weak-and-removal, ft-weak-or-removal): New tests. (ft--test-weak-removal, ft--gc, ft--check-entries, ft--check-entry) (ft--hash-table-entries, ft--populate-hashtable, ft--component-num) (ft--parse-component, ft--dead-component, ft--format-component) (ft--init-rng, ft--nentries): New helpers.
2025-08-07Fix some tests on OpenBSDManuel Giraud
* test/lisp/eshell/em-script-tests.el (em-script-test/batch-file/shebang): "env -S" is not supported. * test/src/fns-tests.el (fns-tests-random): 'random' is non-deterministic on OpenBSD. (Bug#79190)
2025-07-11* src/fns.c (Flength): Fix char table length off-by-one bug.Mattias Engdegård
2025-03-24Add basic and low-level tests for hash tablesStefan Kangas
* test/src/fns-tests.el (test-hash-table) (test-hash-table-wrong-keywords, test-remhash, test-clrhash) (test-hash-table-p, test-hash-table-count, test-maphash) (test-copy-hash-table): New tests.
2025-03-01Merge from origin/emacs-30Eli Zaretskii
62b3d3136fa Fix fns-tests-collate-strings failure with musl 840c6824589 ; (completion-preview-complete): Fix bug#76606 fa42626a6a8 ; Fix indentation in cl.texi example 7ff806da496 ; Fix my last commit
2025-02-27Fix fns-tests-collate-strings failure with muslPaul Eggert
* test/src/fns-tests.el (fns-tests-collate-strings): Don’t assume "en_XY.UTF-8", or any particular string, is an invalid locale, as they all seem to be valid in musl. Instead, simply test that a non-string is invalid. (Bug#76550)
2025-02-23Prefer incf to cl-incf in testsStefan Kangas
* test/lisp/emacs-lisp/bytecomp-tests.el (bytecomp-reify-function): * test/lisp/emacs-lisp/cl-extra-tests.el (cl-getf): * test/lisp/emacs-lisp/cl-macs-tests.el (cl-macs-loop-for-as-arith-order-side-effects) (cl-macs-loop-for-as-equals-then, cl-macs-loop-do, cl-macs-loop-finally) (cl-macs-loop-in-ref, cl-macs-loop-being-elements-of-ref) (cl-macs-test--symbol-macrolet, cl-the): * test/lisp/emacs-lisp/cl-seq-tests.el (cl-lib-test-remove) (cl-lib-test-remove-if-not): * test/lisp/emacs-lisp/edebug-resources/edebug-test-code.el (edebug-test-code-range): * test/lisp/emacs-lisp/edebug-tests.el (edebug-tests-deduplicate): * test/lisp/emacs-lisp/generator-tests.el (cps-while-incf): (cps-test-iter-cleanup-once-only): * test/lisp/emacs-lisp/hierarchy-tests.el (hierarchy-labelfn-button-if-does-not-button-unless-condition) (hierarchy-labelfn-button-if-does-button-when-condition): * test/lisp/emacs-lisp/let-alist-tests.el (let-alist-evaluate-once): * test/lisp/emacs-lisp/lisp-mode-tests.el (indent-sexp, lisp-indent-region): * test/lisp/emacs-lisp/map-tests.el (test-map-elt-gv) (test-setf-map-with-function): * test/lisp/emacs-lisp/multisession-tests.el (multi-test-sqlite-simple) (multi-test-sqlite-busy, multi-test-files-simple) (multi-test-files-busy): * test/lisp/emacs-lisp/oclosure-tests.el (oclosure-test, oclosure-test-mutate): * test/lisp/emacs-lisp/track-changes-tests.el (track-changes-tests--random): * test/lisp/files-tests.el (files-tests--with-buffer-offer-save): * test/lisp/net/shr-tests.el (shr-test/zoom-image): * test/lisp/replace-tests.el (replace-tests-with-undo): * test/src/buffer-tests.el (test-overlay-randomly): * test/src/data-tests.el (test-bool-vector-bv-from-hex-string): * test/src/fns-tests.el (fns-tests-sort): * test/src/json-tests.el (json-insert/signal, json-insert/throw): * test/src/minibuf-tests.el (minibuf-tests--strings-to-symbol-alist) (minibuf-tests--strings-to-string-alist) (minibuf-tests--strings-to-string-hashtable) (minibuf-tests--strings-to-symbol-hashtable): * test/src/process-tests.el (make-process/file-handler/found): Prefer incf to cl-incf.
2025-01-02Update copyright year to 2025Stefan Kangas
Run "TZ=UTC0 admin/update-copyright".
2025-01-01Update copyright year to 2025Paul Eggert
Run "TZ=UTC0 admin/update-copyright".
2024-07-04; Strengthen value< tests slightlyMattias Engdegård
* test/src/fns-tests.el (fns-value<-ordered, fns-value<-unordered): Check equality and/or unordered results using lexicographic constructs.
2024-07-04Compare fixnums and floats accurately in value<Mattias Engdegård
Make `value<` compare fixnums and floats by value, as `<` does, instead of coercing the fixnum to a float first which is what C would do. This matters when the fixnum cannot be represented as a float. For example, C would evaluate 72057594037927935 < 72057594037927936.0 to false since the operands are converted to the same floating-point number. * src/fns.c (fixnum_float_cmp): New. (value_cmp): Use it. * test/src/fns-tests.el (fns-value<-ordered, fns-value<-unordered): New test cases.
2024-04-29Fix value< string comparison ungoodthinkMattias Engdegård
* src/fns.c (string_cmp): Fix bad comparisons for certain strings. This only affected `value<` for aggregates, not `string<`. * test/src/fns-tests.el (fns-value<-ordered): Add test cases.
2024-04-14GC-mark temporary key values created when sorting (bug#69709)Mattias Engdegård
Bug reported and fix proposed by Aris Spathis. * src/sort.c (merge_markmem): Mark heap-allocated temporary key values. (tim_sort): Delay key function calls to after marking function has been registered. * test/src/fns-tests.el (fns-tests-sort-gc): New test.
2024-03-29New `sort` keyword arguments (bug#69709)Mattias Engdegård
Add the :key, :lessp, :reverse and :in-place keyword arguments. The old calling style remains available and is unchanged. * src/fns.c (sort_list, sort_vector, Fsort): * src/sort.c (tim_sort): Add keyword arguments with associated new features. All callers of Fsort adapted. * test/src/fns-tests.el (fns-tests--shuffle-vector, fns-tests-sort-kw): New test. * doc/lispref/sequences.texi (Sequence Functions): Update manual. * etc/NEWS: Announce.
2024-03-29Add `value<` (bug#69709)Mattias Engdegård
It's a general-purpose polymorphic ordering function, like `<` but for any two values of the same type. * src/data.c (syms_of_data): Add the `type-mismatch` error. (bits_word_to_host_endian): Move... * src/lisp.h (bits_word_to_host_endian): ...here, and declare inline. * src/fns.c (Fstring_lessp): Extract the bulk of this function to... (string_cmp): ...this 3-way comparison function, for use elsewhere. (bool_vector_cmp, value_cmp, Fvaluelt): New. * lisp/emacs-lisp/byte-opt.el (side-effect-free-fns, pure-fns): Add `value<`, which is pure and side-effect-free. * test/src/fns-tests.el (fns-value<-ordered, fns-value<-unordered) (fns-value<-type-mismatch, fns-value<-symbol-with-pos) (fns-value<-circle, ert-deftest fns-value<-bool-vector): New tests. * doc/lispref/sequences.texi (Sequence Functions): * doc/lispref/numbers.texi (Comparison of Numbers): * doc/lispref/strings.texi (Text Comparison): Document the new value< function. * etc/NEWS: Announce.
2024-01-31Allow equal user-defined hash table tests with different namesMattias Engdegård
Hash tables using different user-defined tests defined identically sometimes ended up using the wrong test (bug#68668). * src/fns.c (get_hash_table_user_test): Take test name into account when matching the test object. * test/src/fns-tests.el (fns--define-hash-table-test): New.
2024-01-02Merge from savannah/emacs-29Po Lu
dc4e6b13296 ; Update copyright years in more files 64b37776318 ; Run set-copyright from admin.el 8e1c56ae467 ; Add 2024 to copyright years # Conflicts: # doc/misc/modus-themes.org # doc/misc/texinfo.tex # etc/NEWS # etc/refcards/ru-refcard.tex # etc/themes/modus-operandi-theme.el # etc/themes/modus-themes.el # etc/themes/modus-vivendi-theme.el # lib/alloca.in.h # lib/binary-io.h # lib/c-ctype.h # lib/c-strcasecmp.c # lib/c-strncasecmp.c # lib/careadlinkat.c # lib/cloexec.c # lib/close-stream.c # lib/diffseq.h # lib/dup2.c # lib/filemode.h # lib/fpending.c # lib/fpending.h # lib/fsusage.c # lib/getgroups.c # lib/getloadavg.c # lib/gettext.h # lib/gettime.c # lib/gettimeofday.c # lib/group-member.c # lib/malloc.c # lib/md5-stream.c # lib/md5.c # lib/md5.h # lib/memmem.c # lib/memrchr.c # lib/nanosleep.c # lib/save-cwd.h # lib/sha1.c # lib/sig2str.c # lib/stdlib.in.h # lib/strtoimax.c # lib/strtol.c # lib/strtoll.c # lib/time_r.c # lib/xalloc-oversized.h # lisp/auth-source-pass.el # lisp/emacs-lisp/lisp-mnt.el # lisp/emacs-lisp/timer.el # lisp/info-look.el # lisp/jit-lock.el # lisp/loadhist.el # lisp/mail/rmail.el # lisp/net/ntlm.el # lisp/net/webjump.el # lisp/progmodes/asm-mode.el # lisp/progmodes/project.el # lisp/progmodes/sh-script.el # lisp/textmodes/flyspell.el # lisp/textmodes/reftex-toc.el # lisp/textmodes/reftex.el # lisp/textmodes/tex-mode.el # lisp/url/url-gw.el # m4/alloca.m4 # m4/clock_time.m4 # m4/d-type.m4 # m4/dirent_h.m4 # m4/dup2.m4 # m4/euidaccess.m4 # m4/fchmodat.m4 # m4/filemode.m4 # m4/fsusage.m4 # m4/getgroups.m4 # m4/getloadavg.m4 # m4/getrandom.m4 # m4/gettime.m4 # m4/gettimeofday.m4 # m4/gnulib-common.m4 # m4/group-member.m4 # m4/inttypes.m4 # m4/malloc.m4 # m4/manywarnings.m4 # m4/mempcpy.m4 # m4/memrchr.m4 # m4/mkostemp.m4 # m4/mktime.m4 # m4/nproc.m4 # m4/nstrftime.m4 # m4/pathmax.m4 # m4/pipe2.m4 # m4/pselect.m4 # m4/pthread_sigmask.m4 # m4/readlink.m4 # m4/realloc.m4 # m4/sig2str.m4 # m4/ssize_t.m4 # m4/stat-time.m4 # m4/stddef_h.m4 # m4/stdint.m4 # m4/stdio_h.m4 # m4/stdlib_h.m4 # m4/stpcpy.m4 # m4/strnlen.m4 # m4/strtoimax.m4 # m4/strtoll.m4 # m4/time_h.m4 # m4/timegm.m4 # m4/timer_time.m4 # m4/timespec.m4 # m4/unistd_h.m4 # m4/warnings.m4 # nt/configure.bat # nt/preprep.c # test/lisp/register-tests.el
2024-01-02; Add 2024 to copyright yearsPo Lu
2023-09-04Correct the handling of symbols with position in equalAlan Mackenzie
* src/fns.c (internal_equal): Only regard symbols with position as their symbols when symbols-with-pos-enabled is non-nil. * doc/lispref/symbols.texi (Symbols with Position): Expand the description of symbols with position, in particular the way they work with eq and equal. * doc/lispref/objects.texi (Equality Predicates): Describe how eq and equal handle symbols with position. * test/src/fns-tests.el (fns-tests-equal-symbols-with-position): New tests for symbols with position.
2023-05-13Don't mutate constants in testsMattias Engdegård
* test/lisp/emacs-lisp/cl-macs-tests.el (cl-macs-test--symbol-macrolet): * test/lisp/emacs-lisp/cl-print-tests.el (cl-print-tests-ellipsis-circular): * test/lisp/emacs-lisp/eieio-tests/eieio-test-persist.el (eieio-test-persist-interior-lists): * test/lisp/textmodes/reftex-tests.el (reftex-all-used-citation-keys): * test/src/xdisp-tests.el (xdisp-tests--minibuffer-resizing): * test/src/fns-tests.el (test-vector-delete): Mutate created objects, not constants. * test/lisp/emacs-lisp/subr-x-tests.el (subr-x-test-add-display-text-property): Mutate a created string, and compare using `equal-including-properties` without which the test was rather meaningless. * test/lisp/net/tramp-archive-tests.el (tramp-archive-test16-directory-files): Don't mutate.
2023-04-09; * test/src/fns-tests.el: Strengthen tests of `nreverse`.Mattias Engdegård
2023-03-27Merge from origin/emacs-29Stefan Monnier
8f42db010d1 Improve indenting "case" in Python c4d490490dc ; * test/src/fns-tests.el: Fix last change 875e77a66a6 * test/infra/Dockerfile.emba (emacs-native-comp): Add zli... 64a2b0d36fe Fix failure of fns-tests-collate-strings on Cygwin 90fc6b987ad * lisp/savehist.el (savehist-save): Preserve shared struc... 08fbc133756 Adapt Tramp manual accb3871668 Fix system time sampling on MS-Windows 33d436eefa1 Fix treesit_ensure_parsed (bug#62333) d93a439846f * lisp/help-fns.el (find-lisp-object-file-name): Fix bug#... be8147c53f9 Improve "Bugs" in the Emacs manual
2023-03-25; * test/src/fns-tests.el: Fix last changeKen Brown
2023-03-25Fix failure of fns-tests-collate-strings on CygwinKen Brown
* test/src/fns-tests.el (fns-tests-collate-strings): Use en_XY.UTF-8 instead of en_DE.UTF-8 as an example of an invalid locale; en_DE.UTF-8 is actually a valid locale on Cygwin. Note: The test will still fail on Cygwin releases < 3.5 because of a Cygwin bug. (Bug#62420)
2023-02-22Use delete-char instead of backward-delete-charMattias Engdegård
* lisp/bs.el (bs-delete): * lisp/dired-aux.el (dired-show-file-type): * lisp/emulation/viper-cmd.el (viper-insert-prev-from-insertion-ring): * lisp/man.el (Man-fontify-manpage, Man-cleanup-manpage): * lisp/net/mailcap.el (mailcap-parse-mailcap): * lisp/progmodes/antlr-mode.el (antlr-insert-makefile-rules): * lisp/textmodes/reftex-ref.el (reftex-reference): * lisp/vc/emerge.el: * lisp/woman.el (woman-man-buffer): * test/src/fns-tests.el (fns-tests-hash-buffer): Replace some calls to backward-delete-char with delete-char (negating the argument) since the former is intended for interactive use. This silences most of the interactive-only warnings.
2023-01-01; Add 2023 to copyright years.Eli Zaretskii
2022-10-22Audit some plist uses with new predicate argumentBasil L. Contovounesios
* doc/lispref/lists.texi (Plist Access): Improve description of default predicate. * lisp/emacs-lisp/cl-extra.el (cl-getf, cl--set-getf): Assume plist-member always returns a cons. * lisp/emacs-lisp/gv.el (plist-get): Support new optional predicate argument (bug#47425#91). * lisp/emacs-lisp/map.el: Bump minor version. (map--dispatch): Remove now that bug#58563 is fixed. Break two remaining uses out into corresponding cl-defmethods. (map--plist-p): Add docstring. (map--plist-has-predicate, map--plist-member-1, map--plist-member) (map--plist-put-1, map--plist-put): New definitions for supporting predicate argument backward compatibly. (map-elt): Fix generalized variable getter under a predicate (bug#58531). Use predicate when given a plist. (map-put): Avoid gratuitous warnings when called without the hidden predicate argument. Improve obsoletion message. (map-put!): Use predicate when given a plist. (map-contains-key): Ditto. Declare forgotten advertised-calling-convention (bug#58531#19). (map--put): Group definition in file together with that of map-put!. * lisp/files-x.el (connection-local-normalize-criteria): Simplify using mapcan + plist-get. * lisp/net/eudc.el (eudc--plist-member): New convenience function. (eudc-plist-member, eudc-plist-get, eudc-lax-plist-get): Use it instead of open-coding plist-member. * src/fns.c (Fplist_get, plist_get, Fplist_put, plist_put): Pass the plist element as the first argument to the predicate, for consistency with assoc + alist-get. (Fplist_member, plist_member): Move from widget to plist section. Open-code the EQ case in plist_member, and call it from Fplist_member in that case, rather than the other way around. * test/lisp/apropos-tests.el (apropos-tests-format-plist): Avoid polluting obarray. * test/lisp/emacs-lisp/cl-extra-tests.el (cl-getf): Extend test with generalized variables, degenerate plists, and improper lists. * test/lisp/emacs-lisp/gv-tests.el: Byte-compile file; in the meantime bug#24402 seems to have been fixed or worked around. (gv-setter-edebug): Inhibit printing messages. (gv-plist-get): Avoid modifying constant literals. Also test with a predicate argument. * test/lisp/emacs-lisp/map-tests.el (with-maps-do): Simplify docstring. (test-map-elt-testfn): Rename... (test-map-elt-testfn-alist): ...to this. Also test with a predicate argument. (test-map-elt-testfn-plist, test-map-elt-gv, test-map-elt-signature) (test-map-put!-plist, test-map-put!-signature) (test-map-contains-key-signature, test-map-plist-member) (test-map-plist-put): New tests. (test-map-contains-key-testfn): Also test with a predicate argument. (test-map-setf-alist-overwrite-key, test-map-setf-plist-insert-key) (test-map-setf-plist-overwrite-key): Avoid modifying constant literals. (test-hash-table-setf-insert-key) (test-hash-table-setf-overwrite-key): Fix indentation. (test-setf-map-with-function): Make test more precise. * test/lisp/net/eudc-tests.el: New file. * test/lisp/subr-tests.el (test-plistp): Extend test with circular list. * test/src/fns-tests.el (test-cycle-equal, test-cycle-nconc): Move from plist section to circular list section. (plist-put/odd-number-of-elements): Avoid modifying constant literals. (plist-member/improper-list): Simplify. (test-plist): Move to plist section. Also test with a predicate argument.
2022-10-16Expand 'random' testsuiteStefan Kangas
* test/src/fns-tests.el (ert): Require. (fns-tests-random): Expand test.
2022-10-08; * test/src/fns-tests.el (fns-tests--string-lessp-cases): Extend.Mattias Engdegård
2022-09-30Strengthen string-lessp testsMattias Engdegård
* test/src/fns-tests.el (fns-tests--string-lessp-cases) (fns-tests-string-lessp): Check more cases, and in a more robust way.
2022-09-25Don't crash in copy-alist with non-list argumentMattias Engdegård
* src/fns.c (Fcopy_alist): Check argument type. * test/src/fns-tests.el (fns--copy-alist): New test.
2022-09-08test: Remove redundant "" arg to `mapconcat`Stefan Monnier
* test/src/process-tests.el (process-test-stderr-filter): * test/src/print-tests.el (print-tests-continuous-numbering): * test/src/fns-tests.el (fns-tests-mapconcat): * test/src/data-tests.el (test-bool-vector-to-hex-string): * test/src/casefiddle-tests.el (casefiddle-tests-char-properties) (casefiddle-tests-case-table, casefiddle-tests-casing-character): * test/lisp/tabify-tests.el (tabify-tests--test-changes): * test/lisp/subr-tests.el (subr-tests-bug22027): * test/lisp/sort-tests.el (sort-tests-random-word): * test/lisp/net/hmac-md5-tests.el (hmac-md5-test-encode-string): * test/lisp/md4-tests.el (md4-tests-digest->hex): * test/lisp/emacs-lisp/cl-extra-tests.el (cl-extra-test-map): * test/lisp/dired-tests.el (dired-test-directory-files): * test/lisp/char-fold-tests.el (char-fold--random-word): * test/lisp/ansi-color-tests.el (ansi-color-incomplete-sequences-test): Remove redundant "" arg to `mapconcat`.
2022-08-30Accept bignum arguments in `take` and `ntake`Mattias Engdegård
* src/fns.c (Ftake, Fntake): Accept any integer as first argument, for completeness. * test/src/fns-tests.el (fns--take-ntake): Add test cases.
2022-07-17Add `take` and `ntake` (bug#56521)Mattias Engdegård
These are useful list primitives, complementary to `nthcdr`. * src/fns.c (Ftake, Fntake): New. (syms_of_fns): Defsubr them. * doc/lispref/lists.texi (List Elements): * lisp/emacs-lisp/shortdoc.el (list): Document. * lisp/emacs-lisp/byte-opt.el (side-effect-free-fns, pure-fns): Declare `take` pure and side-effect-free. * test/src/fns-tests.el (fns-tests--take-ref, fns--take-ntake): New test. * etc/NEWS: Announce.
2022-07-11Simplify and speed up string-to-multibyteMattias Engdegård
* src/character.h (str_to_multibyte): * src/character.c (str_to_multibyte): Change signature and simplify; the conversion is no longer done in-place. * src/fns.c (string_to_multibyte): Drop temporary buffer and memcpy; adapt to new str_to_multibyte signature. * src/print.c (print_string): Drop memcpy; adapt call to str_to_multibyte. * test/src/fns-tests.el (fns--string-to-unibyte): Rename to... (fns--string-to-unibyte-multibyte): ... this and strengthen, so that the test covers string-to-multibyte reasonably well.
2022-07-10Speed up string-to-unibyteMattias Engdegård
* src/character.h (str_to_unibyte): * src/character.c (str_to_unibyte): Remove. * src/fns.c (Fstring_to_unibyte): Ditch the call to str_to_unibyte and the unnecessary heap allocation. Write new, faster code. * test/src/fns-tests.el (fns--string-to-unibyte): New test.
2022-06-27Allow plist-get/plist-put/plist-member to take a comparison functionLars Ingebrigtsen
* doc/lispref/lists.texi (Plist Access): Document it. * lisp/filesets.el (filesets-reset-fileset) (filesets-ingroup-cache-get): (filesets-ingroup-cache-put): (filesets-build-menu-now): Don't use lax-plist functions. * lisp/simple.el (lax-plist-put, lax-plist-get): Moved here from fns.c and make obsolete. * lisp/emacs-lisp/byte-opt.el (side-effect-free-fns): Don't mark plist functions as side-effect-free or pure. * lisp/emacs-lisp/comp.el (comp-known-type-specifiers): Adjust type. * lisp/emacs-lisp/shortdoc.el (list): Don't document deprecated functions. * src/xdisp.c (build_desired_tool_bar_string): (display_mode_element): (store_mode_line_string): (display_string): (produce_stretch_glyph): (note_mode_line_or_margin_highlight): (note_mouse_highlight): * src/w32.c (serial_configure): * src/sysdep.c (serial_configure): * src/sound.c (parse_sound): * src/process.c (Fset_process_buffer): (Fset_process_sentinel): (Fprocess_contact): (Fmake_process): (Fmake_pipe_process): (Fset_network_process_option): (Fserial_process_configure): (Fmake_serial_process): (set_network_socket_coding_system): (finish_after_tls_connection): (connect_network_socket): (Fmake_network_process): (server_accept_connection): * src/lread.c (ADDPARAM): (hash_table_from_plist): * src/keyboard.c (make_lispy_position): * src/indent.c (check_display_width): * src/image.c (postprocess_image): * src/gnutls.c (gnutls_verify_boot): (Fgnutls_boot): (gnutls_symmetric): (Fgnutls_hash_mac): (Fgnutls_hash_digest): * src/dired.c (filter): * src/data.c (add_to_function_history): * src/coding.c (Fcoding_system_put): Adjust callers from Fplist_put (etc) to plist_put. * src/fns.c (plist_get): (plist_put): (plist_member): New functions (without optional third parameter) to be used in C code. * src/fns.c (Fplist_get, Fplist_put, Fplist_member): Take an optional predicate parameter (bug#47425). * src/lisp.h: Declare new plist_put, plist_get and plist_member functions. * test/lisp/json-tests.el (test-json-add-to-plist): Use plist-get. * test/src/fns-tests.el (test-cycle-lax-plist-get): (test-cycle-lax-plist-put): (lax-plist-get/odd-number-of-elements): (test-plist): Remove lax-plist tests, since semantics have changed (they no longer error out on cycles).
2022-06-24Merge from origin/emacs-28Stefan Kangas
a772c0b852 ; Fix typos: prefer US spelling. # Conflicts: # doc/misc/modus-themes.org
2022-06-23; Fix typos: prefer US spelling.Stefan Kangas
2022-04-04Faster `string-lessp` for unibyte argumentsMattias Engdegård
Since this function is commonly used as a sorting predicate where it is time-critical, this is a useful optimisation. * src/fns.c (Fstring_lessp): Add fast path for the common case when both arguments are unibyte. * test/src/fns-tests.el (fns-tests--string-lessp-cases) (fns-tests-string-lessp): New test.
2022-04-04Replace list and vector sorting with TIMSORT algorithmAndrew G Cohen
* src/Makefile.in (base_obj): Add sort.o. * src/deps.mk (fns.o): Add sort.c. * src/lisp.h: Add prototypes for inorder, tim_sort. * src/sort.c: New file providing tim_sort. * src/fns.c: Remove prototypes for removed routines. (merge_vectors, sort_vector_inplace, sort_vector_copy): Remove. (sort_list, sort_vector): Use tim_sort. * test/src/fns-tests.el (fns-tests-sort): New sorting unit tests.
2022-01-26Add tests for concat, vconcat and appendMattias Engdegård
* test/src/fns-tests.el (fns-tests-concat) (fns-concat, fns-vconcat, fns-append): New.