diff --git a/src/tests/trig.lisp b/src/tests/trig.lisp
index 911b62397a48dd7926de5ae6678b442dc3aaa110..b46c9049ee1d7872da747ce1f3e4fbcbbd8e55fa 100644
--- a/src/tests/trig.lisp
+++ b/src/tests/trig.lisp
@@ -388,3 +388,46 @@
 		-4.080663888418042385451434945255951177650840227682488471558860153w-1
 		1.888w-33)))
 
+(define-test dd-sincos.signed-zeroes
+  "Test sincos at 0d0, -0d0"
+  (:tag :sincos :signed-zeroes :double-double)
+  (assert-equal '(0w0 1w0)
+		(multiple-value-list (kernel::dd-%sincos 0w0)))
+  (assert-equal '(-0w0 1w0)
+		(multiple-value-list (kernel::dd-%sincos -0w0))))
+
+;; Test sincos at a bunch of random points and compare the result from
+;; sin and cos.  If they differ, save the result in a list to be
+;; returned.
+(defun dd-sincos-test (limit n)
+  (let (results)
+    (dotimes (k n)
+      (let* ((x (random limit))
+	     (s-exp (sin x))
+	     (c-exp (cos x)))
+	(multiple-value-bind (s c)
+	    (kernel::dd-%sincos x)
+	  (unless (and (eql s s-exp)
+		       (eql c c-exp))
+	    (push (list x
+			(list s s-exp)
+			(list c c-exp))
+		  results)))))
+    results))
+
+(define-test dd-sincos.consistent
+  "Test sincos is consistent with sin and cos"
+  (:tag :sincos :double-double)
+  ;; Small values
+  (assert-eql nil
+	      (dd-sincos-test (/ kernel:dd-pi 4) 1000))
+  ;; Medium
+  (assert-eql nil
+	      (dd-sincos-test 16w0 1000))
+  ;; Large
+  (assert-eql nil
+	      (dd-sincos-test (scale-float 1w0 120) 1000))
+  ;; Very large
+  (assert-eql nil
+	      (dd-sincos-test (scale-float 1w0 1023) 1000)))
+