core: Add logxor.
authorJan Nieuwenhuizen <janneke@gnu.org>
Wed, 16 May 2018 20:30:08 +0000 (22:30 +0200)
committerJan Nieuwenhuizen <janneke@gnu.org>
Wed, 16 May 2018 20:30:08 +0000 (22:30 +0200)
* src/math.c (logxor): New function.
* tests/math.test ("logxor"): Test it.

src/math.c
tests/math.test

index 2a90f93326f7a71ca4d25544221e04b9814b7df1..bcefcc44e8b22a4a01d2c58ee4e388e3ed56ef12 100644 (file)
@@ -191,6 +191,19 @@ lognot (SCM x)
   return MAKE_NUMBER (n);
 }
 
+SCM
+logxor (SCM x) ///((arity . n))
+{
+  int n = 0;
+  while (x != cell_nil)
+    {
+      assert_number ("logxor", CAR (x));
+      n ^= VALUE (car (x));
+      x = cdr (x);
+    }
+  return MAKE_NUMBER (n);
+}
+
 SCM
 ash (SCM n, SCM count)
 {
index 45b496e12ffa9dca57c3a957665a08c623fbb082..54e38dd7d673c639b95950ce2e36e276417396c7 100755 (executable)
@@ -36,6 +36,7 @@ exit $?
 (pass-if-equal "modulo" 2 (modulo 11 3))
 (pass-if-equal "expt" 8 (expt 2 3))
 (pass-if-equal "logior" 7 (logior 0 1 2 4))
+(pass-if-equal "logxor" -2 (logxor 1 -1))
 (pass-if-equal "ash"
     8 (ash 1 3))
 (pass-if-equal "ash -1"