From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Mattias =?UTF-8?Q?Engdeg=C3=A5rd?= Newsgroups: gmane.emacs.bugs Subject: bug#43764: Calc shift right broken Date: Sat, 10 Oct 2020 18:31:28 +0200 Message-ID: <6AD1115B-D130-4DA1-85E8-F55FEEE87E9D@acm.org> References: <87h7r9ozuh.fsf@gnus.org> <87wo04nnvr.fsf@gnus.org> Mime-Version: 1.0 (Mac OS X Mail 12.4 \(3445.104.17\)) Content-Type: multipart/mixed; boundary="Apple-Mail=_C2F252E3-2D00-48F7-99C0-544A647A5A82" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="39549"; mail-complaints-to="usenet@ciao.gmane.io" Cc: Lars Ingebrigtsen , "43764@debbugs.gnu.org" <43764@debbugs.gnu.org> To: Vincent =?UTF-8?Q?Bela=C3=AFche?= Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Sat Oct 10 18:33:12 2020 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1kRHnz-000ADV-8E for geb-bug-gnu-emacs@m.gmane-mx.org; Sat, 10 Oct 2020 18:33:11 +0200 Original-Received: from localhost ([::1]:43002 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kRHny-000840-7b for geb-bug-gnu-emacs@m.gmane-mx.org; Sat, 10 Oct 2020 12:33:10 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:47608) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kRHms-0007De-Vj for bug-gnu-emacs@gnu.org; Sat, 10 Oct 2020 12:32:03 -0400 Original-Received: from debbugs.gnu.org ([209.51.188.43]:55104) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1kRHmr-0006dF-S8 for bug-gnu-emacs@gnu.org; Sat, 10 Oct 2020 12:32:02 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1kRHmr-0002WU-Ok for bug-gnu-emacs@gnu.org; Sat, 10 Oct 2020 12:32:01 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Mattias =?UTF-8?Q?Engdeg=C3=A5rd?= Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sat, 10 Oct 2020 16:32:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 43764 X-GNU-PR-Package: emacs Original-Received: via spool by 43764-submit@debbugs.gnu.org id=B43764.16023475019669 (code B ref 43764); Sat, 10 Oct 2020 16:32:01 +0000 Original-Received: (at 43764) by debbugs.gnu.org; 10 Oct 2020 16:31:41 +0000 Original-Received: from localhost ([127.0.0.1]:38417 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1kRHmX-0002Vt-Dz for submit@debbugs.gnu.org; Sat, 10 Oct 2020 12:31:41 -0400 Original-Received: from mail1470c50.megamailservers.eu ([91.136.14.70]:33068 helo=mail102c50.megamailservers.eu) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1kRHmU-0002Vc-P4 for 43764@debbugs.gnu.org; Sat, 10 Oct 2020 12:31:40 -0400 X-Authenticated-User: mattiase@bredband.net DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=megamailservers.eu; s=maildub; t=1602347491; bh=pEIgQKDLgTUYhPg6D1bdKvJdDnA42ldizdnTnbv6PQ4=; h=From:Subject:Date:In-Reply-To:Cc:To:References:From; b=Swr8iQ3bc+Gler2z9BzTm+VbaogB3EGeQHmDQQhg45+byGj1UJMTHz086L6XH/RZu IrjepVe3VBWiQ6MSs9kTqeUUDlapaI3Nw3XvESEJWBdoBD74aQm9GbQ0EsqQ9z1dh+ gJXNL+auuqyXWvETVZ7btzFZTRPh4/Jb71TTA4ZA= Feedback-ID: mattiase@acm.or Original-Received: from [192.168.0.4] (c188-150-171-71.bredband.comhem.se [188.150.171.71]) (authenticated bits=0) by mail102c50.megamailservers.eu (8.14.9/8.13.1) with ESMTP id 09AGVTIU016781; Sat, 10 Oct 2020 16:31:30 +0000 In-Reply-To: X-Mailer: Apple Mail (2.3445.104.17) X-CTCH-RefID: str=0001.0A782F27.5F81E1E3.0011, ss=1, re=0.000, recu=0.000, reip=0.000, cl=1, cld=1, fgs=0 X-CTCH-VOD: Unknown X-CTCH-Spam: Unknown X-CTCH-Score: 0.000 X-CTCH-Flags: 0 X-CTCH-ScoreCust: 0.000 X-CSC: 0 X-CHA: v=2.3 cv=S52nP7kP c=1 sm=1 tr=0 a=SF+I6pRkHZhrawxbOkkvaA==:117 a=SF+I6pRkHZhrawxbOkkvaA==:17 a=M51BFTxLslgA:10 a=N54-gffFAAAA:8 a=tDXHnpRu2vysc-3PKosA:9 a=QEXdDO2ut3YA:10 a=v7zKWsmy5NQA:10 a=yUuUdLB3PI3FYE-FF3AA:9 a=B2y7HmGcmWMA:10 a=6l0D2HzqY3Epnrm8mE3f:22 X-Origin-Country: SE X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Original-Sender: "bug-gnu-emacs" Xref: news.gmane.io gmane.emacs.bugs:190220 Archived-At: --Apple-Mail=_C2F252E3-2D00-48F7-99C0-544A647A5A82 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=utf-8 10 okt. 2020 kl. 18.24 skrev Mattias Engdeg=C3=A5rd : > This seems both useful and straightforward to implement and = understand. I've attached a patch (lacking documentation but otherwise = complete) -- is it what you had in mind? Sorry, here is that patch. --Apple-Mail=_C2F252E3-2D00-48F7-99C0-544A647A5A82 Content-Disposition: attachment; filename=0001-Calc-allow-infinite-binary-word-size-bug.patch Content-Type: application/octet-stream; x-unix-mode=0644; name="0001-Calc-allow-infinite-binary-word-size-bug.patch" Content-Transfer-Encoding: quoted-printable =46rom=20ec880e30d82e13ff5c6cb36f7736280be45ee9e0=20Mon=20Sep=2017=20= 00:00:00=202001=0AFrom:=20=3D?UTF-8?q?Mattias=3D20Engdeg=3DC3=3DA5rd?=3D=20= =0ADate:=20Sat,=2010=20Oct=202020=2018:02:49=20+0200=0A= Subject:=20[PATCH]=20Calc:=20allow=20infinite=20binary=20word=20size=20= (bug#=0AMIME-Version:=201.0=0AContent-Type:=20text/plain;=20= charset=3DUTF-8=0AContent-Transfer-Encoding:=208bit=0A=0ASetting=20the=20= word=20size=20("b=20w")=20to=200=20removes=20the=20word=20size=20= clipping=20for=0Aall=20bit=20operations=20(effectively=20as=20if=20a=20= word=20size=20of=20-=E2=88=9E=20had=20been=20set).=0ARotation=20is=20= disallowed;=20logical=20and=20arithmetic=20shifts=20behave=0A= identically.=0A=0AAfter=20a=20suggestion=20by=20Vincent=20Bela=C3=AFche.=0A= =0A*=20lisp/calc/calc-bin.el=20(calc-word-size,=20math-binary-arg)=0A= (math-binary-modulo-args,=20calcFunc-lsh,=20calcFunc-ash,=20= calcFunc-rot)=0A(math-clip):=20Allow=20a=20word=20size=20of=200,=20= meaning=20-=E2=88=9E.=0A*=20test/lisp/calc/calc-tests.el=0A= (calc-tests--not,=20calc-tests--and,=20calc-tests--or,=20= calc-tests--xor)=0A(calc-tests--diff):=20New=20functions.=0A= (calc-tests--clip,=20calc-tests--rot,=20calc-shift-binary):=20Extend=20= to=0Acover=20word=20size=200.=0A(calc-bit-ops):=20New=20test.=0A---=0A=20= lisp/calc/calc-bin.el=20=20=20=20=20=20=20=20|=2030=20++++++++++------=0A= =20test/lisp/calc/calc-tests.el=20|=2070=20= +++++++++++++++++++++++++++++++-----=0A=202=20files=20changed,=2080=20= insertions(+),=2020=20deletions(-)=0A=0Adiff=20--git=20= a/lisp/calc/calc-bin.el=20b/lisp/calc/calc-bin.el=0Aindex=20= aa10d55e52..3570b890ab=20100644=0A---=20a/lisp/calc/calc-bin.el=0A+++=20= b/lisp/calc/calc-bin.el=0A@@=20-145,9=20+145,10=20@@=20calc-word-size=0A=20= =20=20=20(setq=20math-half-2-word-size=20(math-power-of-2=20(1-=20= (math-abs=20n))))=0A=20=20=20=20(calc-do-refresh)=0A=20=20=20=20= (calc-refresh-evaltos)=0A-=20=20=20(if=20(<=20n=200)=0A-=20=20=20=20=20=20= =20(message=20"Binary=20word=20size=20is=20%d=20bits=20(two's=20= complement)"=20(-=20n))=0A-=20=20=20=20=20(message=20"Binary=20word=20= size=20is=20%d=20bits"=20n))))=0A+=20=20=20(cond=0A+=20=20=20=20((<=20n=20= 0)=20(message=20"Binary=20word=20size=20is=20%d=20bits=20(two's=20= complement)"=20(-=20n)))=0A+=20=20=20=20((>=20n=200)=20(message=20= "Binary=20word=20size=20is=20%d=20bits"=20n))=0A+=20=20=20=20(t=20= (message=20"No=20fixed=20binary=20word=20size")))))=0A=20=0A=20=0A=20=0A= @@=20-262,9=20+263,10=20@@=20calcFunc-and=0A=20(defun=20math-binary-arg=20= (a=20w)=0A=20=20=20(if=20(not=20(Math-integerp=20a))=0A=20=20=20=20=20=20= =20(setq=20a=20(math-trunc=20a)))=0A-=20=20(if=20(<=20a=200)=0A-=20=20=20= =20=20=20(logand=20a=20(1-=20(ash=201=20(if=20w=20(math-trunc=20w)=20= calc-word-size))))=0A-=20=20=20=20a))=0A+=20=20(let=20((w=20(if=20w=20= (math-trunc=20w)=20calc-word-size)))=0A+=20=20=20=20(if=20(and=20(<=20a=20= 0)=20(not=20(zerop=20w)))=0A+=20=20=20=20=20=20=20=20(logand=20a=20(1-=20= (ash=201=20w)))=0A+=20=20=20=20=20=20a)))=0A=20=0A=20(defun=20= math-binary-modulo-args=20(f=20a=20b=20w)=0A=20=20=20(let=20(mod)=0A@@=20= -285,7=20+287,7=20@@=20math-binary-modulo-args=0A=20=20=20=20=20(let=20= ((bits=20(math-integer-log2=20mod)))=0A=20=20=20=20=20=20=20(if=20bits=0A= =20=09=20=20(if=20w=0A-=09=20=20=20=20=20=20(if=20(/=3D=20w=20bits)=0A+=09= =20=20=20=20=20=20(if=20(and=20(/=3D=20w=20bits)=20(not=20(zerop=20w)))=0A= =20=09=09=20=20(calc-record-why=0A=20=09=09=20=20=20"*Warning:=20Modulus=20= inconsistent=20with=20word=20size"))=0A=20=09=20=20=20=20(setq=20w=20= bits))=0A@@=20-371,11=20+373,12=20@@=20calcFunc-lsh=0A=20=09(math-clip=20= (calcFunc-lsh=20a=20n=20(-=20w))=20w)=0A=20=20=20=20=20=20=20(if=20= (Math-integer-negp=20a)=0A=20=09=20=20(setq=20a=20(math-clip=20a=20w)))=0A= -=20=20=20=20=20=20(cond=20((or=20(Math-lessp=20n=20(-=20w))=0A-=09=09=20= (Math-lessp=20w=20n))=0A+=20=20=20=20=20=20(cond=20((and=20(or=20= (Math-lessp=20n=20(-=20w))=0A+=09=09=20=20=20=20=20=20(Math-lessp=20w=20= n))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(not=20= (zerop=20w)))=0A=20=09=20=20=20=20=200)=0A=20=09=20=20=20=20((<=20n=200)=0A= -=09=20=20=20=20=20(math-quotient=20(math-clip=20a=20w)=20= (math-power-of-2=20(-=20n))))=0A+=09=20=20=20=20=20(ash=20(math-clip=20a=20= w)=20n))=0A=20=09=20=20=20=20(t=0A=20=09=20=20=20=20=20(math-clip=20= (math-mul=20a=20(math-power-of-2=20n))=20w))))))=0A=20=0A@@=20-403,7=20= +406,8=20@@=20calcFunc-ash=0A=20=09=20=20=20=20(setq=20a=20(math-clip=20= a=20w)))=0A=20=09(let=20((two-to-sizem1=20(math-power-of-2=20(1-=20w)))=0A= =20=09=20=20=20=20=20=20(sh=20(calcFunc-lsh=20a=20n=20w)))=0A-=09=20=20= (cond=20((zerop=20(logand=20a=20two-to-sizem1))=0A+=09=20=20(cond=20((or=20= (zerop=20w)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20(zerop=20(logand=20a=20two-to-sizem1)))=0A=20=09=09=20sh)=0A=20=09=09= ((Math-lessp=20n=20(-=201=20w))=0A=20=09=09=20(math-add=20(math-mul=20= two-to-sizem1=202)=20-1))=0A@@=20-421,6=20+425,8=20@@=20calcFunc-rot=0A=20= =20=20(if=20(eq=20(car-safe=20a)=20'mod)=0A=20=20=20=20=20=20=20= (math-binary-modulo-args=20'calcFunc-rot=20a=20n=20w)=0A=20=20=20=20=20= (setq=20w=20(if=20w=20(math-trunc=20w)=20calc-word-size))=0A+=20=20=20=20= (when=20(zerop=20w)=0A+=20=20=20=20=20=20(error=20"Rotation=20requires=20= a=20nonzero=20word=20size"))=0A=20=20=20=20=20(or=20(integerp=20w)=0A=20=09= (math-reject-arg=20w=20'fixnump))=0A=20=20=20=20=20(or=20(Math-integerp=20= a)=0A@@=20-452,6=20+458,8=20@@=20math-clip=0A=20=09=20(if=20= (Math-natnum-lessp=20a=20(math-power-of-2=20(-=20-1=20w)))=0A=20=09=20=20= =20=20=20a=0A=20=09=20=20=20(math-sub=20a=20(math-power-of-2=20(-=20= w)))))=0A+=20=20=20=20=20=20=20=20((math-zerop=20w)=0A+=20=20=20=20=20=20= =20=20=20a)=0A=20=09((Math-negp=20a)=0A=20=09=20(math-binary-arg=20a=20= w))=0A=20=09((integerp=20a)=0Adiff=20--git=20= a/test/lisp/calc/calc-tests.el=20b/test/lisp/calc/calc-tests.el=0Aindex=20= fe37c424d5..f8c4925c2f=20100644=0A---=20a/test/lisp/calc/calc-tests.el=0A= +++=20b/test/lisp/calc/calc-tests.el=0A@@=20-574,15=20+574,35=20@@=20= calc-unix-date=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= 86400))))=0A=20=20=20=20=20=20=20(should=20(equal=20(math-format-date=20= d-1991-01-09-0600)=20"663400800")))))=0A=20=0A-;;=20Reference=20= implementations=20of=20binary=20shift=20functions:=0A+;;=20Reference=20= implementations=20of=20bit=20operations:=0A=20=0A=20(defun=20= calc-tests--clip=20(x=20w)=0A=20=20=20"Clip=20X=20to=20W=20bits,=20= signed=20if=20W=20is=20negative,=20otherwise=20unsigned."=0A-=20=20(if=20= (>=3D=20w=200)=0A-=20=20=20=20=20=20(logand=20x=20(-=20(ash=201=20w)=20= 1))=0A-=20=20=20=20(let=20((y=20(calc-tests--clip=20x=20(-=20w)))=0A-=20=20= =20=20=20=20=20=20=20=20(msb=20(ash=201=20(-=20(-=20w)=201))))=0A-=20=20=20= =20=20=20(-=20y=20(ash=20(logand=20y=20msb)=201)))))=0A+=20=20(cond=20= ((zerop=20w)=20x)=0A+=20=20=20=20=20=20=20=20((>=20w=200)=20(logand=20x=20= (-=20(ash=201=20w)=201)))=0A+=20=20=20=20=20=20=20=20(t=20(let=20((y=20= (calc-tests--clip=20x=20(-=20w)))=0A+=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20(msb=20(ash=201=20(-=20(-=20w)=201))))=0A+=20=20=20=20=20=20= =20=20=20=20=20=20=20(-=20y=20(ash=20(logand=20y=20msb)=201))))))=0A+=0A= +(defun=20calc-tests--not=20(x=20w)=0A+=20=20"Bitwise=20complement=20of=20= X,=20word=20size=20W."=0A+=20=20(calc-tests--clip=20(lognot=20x)=20w))=0A= +=0A+(defun=20calc-tests--and=20(x=20y=20w)=0A+=20=20"Bitwise=20AND=20of=20= X=20and=20W,=20word=20size=20W."=0A+=20=20(calc-tests--clip=20(logand=20= x=20y)=20w))=0A+=0A+(defun=20calc-tests--or=20(x=20y=20w)=0A+=20=20= "Bitwise=20OR=20of=20X=20and=20Y,=20word=20size=20W."=0A+=20=20= (calc-tests--clip=20(logior=20x=20y)=20w))=0A+=0A+(defun=20= calc-tests--xor=20(x=20y=20w)=0A+=20=20"Bitwise=20XOR=20of=20X=20and=20= Y,=20word=20size=20W."=0A+=20=20(calc-tests--clip=20(logxor=20x=20y)=20= w))=0A+=0A+(defun=20calc-tests--diff=20(x=20y=20w)=0A+=20=20"Bitwise=20= AND=20of=20X=20and=20NOT=20Y,=20word=20size=20W."=0A+=20=20= (calc-tests--clip=20(logand=20x=20(lognot=20y))=20w))=0A=20=0A=20(defun=20= calc-tests--lsh=20(x=20n=20w)=0A=20=20=20"Logical=20shift=20left=20X=20= by=20N=20steps,=20word=20size=20W."=0A@@=20-616,6=20+636,8=20@@=20= calc-tests--rash=0A=20=0A=20(defun=20calc-tests--rot=20(x=20n=20w)=0A=20=20= =20"Rotate=20X=20left=20by=20N=20steps,=20word=20size=20W."=0A+=20=20= (when=20(zerop=20w)=0A+=20=20=20=20(error=20"Undefined"))=0A=20=20=20= (let*=20((aw=20(abs=20w))=0A=20=20=20=20=20=20=20=20=20=20(y=20= (calc-tests--clip=20x=20aw))=0A=20=20=20=20=20=20=20=20=20=20(steps=20= (mod=20n=20aw)))=0A@@=20-623,7=20+645,7=20@@=20calc-tests--rot=0A=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20w)))=0A=20=0A= =20(ert-deftest=20calc-shift-binary=20()=0A-=20=20(dolist=20(w=20'(16=20= 32=20-16=20-32))=0A+=20=20(dolist=20(w=20'(16=2032=20-16=20-32=200))=0A=20= =20=20=20=20(dolist=20(x=20'(0=201=20#x1234=20#x8000=20#xabcd=20#xffff=0A= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20#x12345678=20= #xabcdef12=20#x80000000=20#xffffffff=0A=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20#x1234567890ab=20#x1234967890ab=0A@@=20-638,8=20= +660,38=20@@=20calc-shift-binary=0A=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20(calc-tests--ash=20x=20n=20w)))=0A=20=20= =20=20=20=20=20=20=20(should=20(equal=20(calcFunc-rash=20x=20n=20w)=0A=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (calc-tests--rash=20x=20n=20w)))=0A-=20=20=20=20=20=20=20=20(should=20= (equal=20(calcFunc-rot=20x=20n=20w)=0A-=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20(calc-tests--rot=20x=20n=20w)))))))=0A+=20= =20=20=20=20=20=20=20(unless=20(zerop=20w)=0A+=20=20=20=20=20=20=20=20=20= =20(should=20(equal=20(calcFunc-rot=20x=20n=20w)=0A+=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(calc-tests--rot=20= x=20n=20w)))))))=0A+=20=20(should-error=20(calcFunc-rot=201=201=200)))=0A= +=0A+(ert-deftest=20calc-bit-ops=20()=0A+=20=20(dolist=20(w=20'(16=2032=20= -16=20-32=200))=0A+=20=20=20=20(dolist=20(x=20'(0=201=20#x1234=20#x8000=20= #xabcd=20#xffff=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= #x12345678=20#xabcdef12=20#x80000000=20#xffffffff=0A+=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20#x1234567890ab=20#x1234967890ab=0A+=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20-1=20-14=20#x-8000=20#x-ffff=20= #x-8001=20#x-10000=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= #x-80000000=20#x-ffffffff=20#x-80000001=20#x-100000000))=0A+=20=20=20=20=20= =20(should=20(equal=20(calcFunc-not=20x=20w)=0A+=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20(calc-tests--not=20x=20w)))=0A+=0A+=20= =20=20=20=20=20(dolist=20(n=20'(0=201=204=2016=2032=20-1=20-4=20-16=20= -32))=0A+=20=20=20=20=20=20=20=20(equal=20(calcFunc-clip=20x=20n)=0A+=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20(calc-tests--clip=20x=20n)))=0A+=0A= +=20=20=20=20=20=20(dolist=20(y=20'(0=201=20#x1234=20#x8000=20#xabcd=20= #xffff=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= #x12345678=20#xabcdef12=20#x80000000=20#xffffffff=0A+=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20#x1234567890ab=20= #x1234967890ab=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20-1=20-14=20#x-8000=20#x-ffff=20#x-8001=20#x-10000=0A+=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20#x-80000000=20= #x-ffffffff=20#x-80000001=20#x-100000000))=0A+=20=20=20=20=20=20=20=20= (should=20(equal=20(calcFunc-and=20x=20y=20w)=0A+=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(calc-tests--and=20x=20y=20= w)))=0A+=20=20=20=20=20=20=20=20(should=20(equal=20(calcFunc-or=20x=20y=20= w)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (calc-tests--or=20x=20y=20w)))=0A+=20=20=20=20=20=20=20=20(should=20= (equal=20(calcFunc-xor=20x=20y=20w)=0A+=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20(calc-tests--xor=20x=20y=20w)))=0A+=20=20= =20=20=20=20=20=20(should=20(equal=20(calcFunc-diff=20x=20y=20w)=0A+=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (calc-tests--diff=20x=20y=20w)))))))=0A=20=0A=20(provide=20'calc-tests)=0A= =20;;;=20calc-tests.el=20ends=20here=0A--=20=0A2.21.1=20(Apple=20= Git-122.3)=0A=0A= --Apple-Mail=_C2F252E3-2D00-48F7-99C0-544A647A5A82--