(cl-assert (equal a b) t)
nil))))))))
((pred arrayp)
+ ;; For mixed unibyte/multibyte string comparisons, make both multibyte.
+ (when (and (stringp a)
+ (xor (multibyte-string-p a) (multibyte-string-p b)))
+ (setq a (string-to-multibyte a))
+ (setq b (string-to-multibyte b)))
(if (/= (length a) (length b))
`(arrays-of-different-length ,(length a) ,(length b)
,a ,b
(should (equal (ert--explain-equal 'a sym)
`(different-symbols-with-the-same-name a ,sym)))))
+(ert-deftest ert-test-explain-equal-strings ()
+ (should (equal (ert--explain-equal "abc" "axc")
+ '(array-elt 1 (different-atoms
+ (?b "#x62" "?b")
+ (?x "#x78" "?x")))))
+ (should (equal (ert--explain-equal "abc" "abxc")
+ '(arrays-of-different-length
+ 3 4 "abc" "abxc" first-mismatch-at 2)))
+ (should (equal (ert--explain-equal "xyA" "xyÅ")
+ '(array-elt 2 (different-atoms
+ (?A "#x41" "?A")
+ (?Å "#xc5" "?Å")))))
+ (should (equal (ert--explain-equal "m\xff" "m\u00ff")
+ `(array-elt
+ 1 (different-atoms
+ (#x3fffff "#x3fffff" ,(string-to-multibyte "?\xff"))
+ (#xff "#xff" "?ÿ")))))
+ (should (equal (ert--explain-equal (string-to-multibyte "m\xff") "m\u00ff")
+ `(array-elt
+ 1 (different-atoms
+ (#x3fffff "#x3fffff" ,(string-to-multibyte "?\xff"))
+ (#xff "#xff" "?ÿ"))))))
+
(ert-deftest ert-test-explain-equal-improper-list ()
(should (equal (ert--explain-equal '(a . b) '(a . c))
'(cdr (different-atoms b c)))))