diff --git a/src/combinations.lisp b/src/combinations.lisp index 028f096..fbba998 100644 --- a/src/combinations.lisp +++ b/src/combinations.lisp @@ -52,24 +52,26 @@ (DEFUN S-CMPR (symbol1 symbol2) - (declare (symbol symbol1 symbol2)) - (the cmpr - (if (#+aclpc acl:whole-string< - #-aclpc string< symbol1 symbol2) - :less - (if (#+aclpc acl:whole-string= - #-aclpc string= symbol1 symbol2) - :equal - :greater)))) + (declare (symbol symbol1 symbol2)) + (the cmpr + (if (#+aclpc acl:whole-string< + #-aclpc string< symbol1 symbol2) + :less + (if (#+aclpc acl:whole-string= + #-aclpc string= symbol1 symbol2) + :equal + :greater)))) + (DEFUN F-CMPR (n1 n2) - (declare (fixnum n1 n2)) - (the cmpr - (if (< n1 n2) - :less - (if (= n1 n2) - :equal - :greater)))) + (declare (fixnum n1 n2)) + (the cmpr + (if (< n1 n2) + :less + (if (= n1 n2) + :equal + :greater)))) + (DEFUN L-CMPR (list1 list2) (declare (list list1 list2)) @@ -82,12 +84,12 @@ (lexico (s-cmpr (first list1) (first list2)) (l-cmpr (rest list1) (rest list2))) - :greater) - (if (symbolp (first list2)) - :less - (lexico - (f-cmpr (first list1) (first list2)) - (l-cmpr (rest list1) (rest list2)))))) + :greater) + (if (symbolp (first list2)) + :less + (lexico + (f-cmpr (first list1) (first list2)) + (l-cmpr (rest list1) (rest list2)))))) ;;;; diff --git a/test/combinations-test.lisp b/test/combinations-test.lisp index 2cf9c28..c65e74b 100644 --- a/test/combinations-test.lisp +++ b/test/combinations-test.lisp @@ -7,6 +7,7 @@ (is (equal (cat:f-cmpr 1 2) :less)) (is (equal (cat:f-cmpr 2 2) :equal)) (is (equal (cat:f-cmpr 3 2) :greater)) + (is (equal (cat:f-cmpr 123 789) :less)) (is (equal (cat:maplexico #'cat:f-cmpr '(1 2 3) '(1 3)) :less)) (is (equal (cat:maplexico #'cat:f-cmpr '(1 2 3) '(1 1)) :greater)) (is (equal (cat:maplexico #'cat:f-cmpr '(1 1) '(1 1 0)) :less)) @@ -23,12 +24,15 @@ (is (equal (cat:l-cmpr '(1) '(a)) :less)) (is (equal (cat:l-cmpr '(1) '(1)) :equal)) (is (equal (cat:l-cmpr '(1 a) '(1 1)) :greater)) + (is (equal (cat:l-cmpr '(1 a b) '(1 a)) :greater)) (is (equal (cat:l-cmpr '(1 a) '(1 a b)) :less))) (test s-cmpr (is (equal (cat:s-cmpr 'a 'b) :less)) (is (equal (cat:s-cmpr 'b 'b) :equal)) - (is (equal (cat:s-cmpr 'c 'b) :greater))) + (is (equal (cat:s-cmpr 'c 'b) :greater)) + (is (equal (cat:s-cmpr 'circulation 'circular) :greater)) + (is (equal (cat:s-cmpr 'qwerty 'qwerty) :equal))) (test cmbn (let ((comb (cat:cmbn 2))) @@ -288,3 +292,33 @@ (is (eq comb c)) (is (equal (cat:cmbn-degr comb) 10)) (is (equal (cat:cmbn-list comb) nil)))) + +(test uvwz + (let* ((comb1 (cat:cmbn 1 1 'u 2 'v 3 'w 4 'z)) + (comb1-list (cat:cmbn-list comb1)) + (term3 (third comb1-list)) + (mcomb1 (cat:cmbn-opps comb1)) + (comb2 (cat:n-cmbn 10 comb1)) + (comb12 (cat:2cmbn-add #'cat:s-cmpr comb1 comb2)) + (comb112 (cat:2cmbn-sbtr #'cat:s-cmpr comb1 comb12)) + (comb12n (cat:ncmbn-add #'cat:s-cmpr comb1 comb2 comb1 comb2 + comb1 comb2 comb1 comb2 comb1 comb2))) + (is (cat:cmbn-non-zero-p comb1)) + (is (equal comb1-list '((1 . u) (2 . v) (3 . w) (4 . z)))) + (is (equal (cat:cffc term3) 3)) + (is (equal (cat:gnrt term3) 'w)) + (is (equal (cat:cmbn-degr comb1) (cat:cmbn-degr mcomb1))) + (is (equal (cat:cmbn-list mcomb1) '((-1 . u) (-2 . v) + (-3 . w) (-4 . z)))) + (is (equal (cat:cmbn-degr comb1) (cat:cmbn-degr comb2))) + (is (equal (cat:cmbn-list comb2) '((10 . u) (20 . v) + (30 . w) (40 . z)))) + (is (equal (cat:cmbn-degr comb1) (cat:cmbn-degr comb12))) + (is (equal (cat:cmbn-list comb12) '((11 . u) (22 . v) + (33 . w) (44 . z)))) + (is (equal (cat:cmbn-degr comb1) (cat:cmbn-degr comb112))) + (is (equal (cat:cmbn-list comb112) '((-10 . u) (-20 . v) + (-30 . w) (-40 . z)))) + (is (equal (cat:cmbn-degr comb1) (cat:cmbn-degr comb12n))) + (is (equal (cat:cmbn-list comb12n) '((55 . u) (110 . v) + (165 . w) (220 . z))))))