(fiasco:define-test-package #:st-buchberger-test
(:use #:st-buchberger)
(:import-from #:st-buchberger #:element->string))
(in-package #:st-buchberger-test)
(deftest test-make-polynomial ()
(flet ((is-string= (sexp string)
"Assert that the polynomial given by SEXP is represented as STRING."
(is (string= (element->string (make-polynomial sexp))
string))))
(signals error (make-polynomial nil))
(is (ring-zero-p (make-polynomial 0)))
(is (ring-zero-p (make-polynomial '(+))))
(is (ring-zero-p (make-polynomial '(-))))
(is-string= 1 "1")
(is-string= 'x "x")
(signals error (make-polynomial 'w))
(is-string= '(+ x y z) "x + y + z")
(is-string= '(* (expt x 2) y (expt z 3)) "x^2yz^3")
(signals error (make-polynomial '(* 1.0d0 x)))
(signals error (make-polynomial '(* -1 0)))
(signals error (make-polynomial '(expt 3 2)))
(signals error (make-polynomial '(expt 3 2)))
(signals error (make-polynomial '(expt x -1)))
(is-string= '(- (expt x 2) (* 2 x y) (- (expt y 2)))
"x^2 - 2xy + y^2")))
(deftest test-member-p ()
(with-polynomial-ring
(make-instance 'polynomial-ring :variables '(x y))
(let* ((f (make-polynomial 'x))
(g (make-polynomial '(+ x y)))
(h (make-polynomial 1))
(ideal (make-ideal f g)))
(is (member-p (ring* f g) ideal))
(is (not (member-p h ideal))))))