예제 #1
0
    def test_natural_numbers(self):
        self.assertEqual((unchurch_num) (zero), 0)
        self.assertEqual((unchurch_num) (one), 1)
        self.assertEqual((unchurch_num) (two), 2)
        self.assertEqual((unchurch_num) (three), 3)

        self.assertEqual((unchurch_num) (num (12)), 12)
        self.assertEqual((unchurch_num) (num (17)), 17)
        self.assertEqual((unchurch_num) (num (950)), 950)
예제 #2
0
    def test_arithmetic_operators_N(self):
        self.assertEqual((unchurch_num) ((succ) (zero)), 1)
        self.assertEqual((unchurch_num) ((succ) (num (129))), 130)

        self.assertEqual((unchurch_num) ((pred) (zero)), 0)
        self.assertEqual((unchurch_num) ((pred) (one)), 0)
        self.assertEqual((unchurch_num) ((pred) (num (130))), 129)

        self.assertEqual((unchurch_num) ((add) (zero)(zero)), 0)
        self.assertEqual((unchurch_num) ((add) (zero)(one)), 1)
        self.assertEqual((unchurch_num) ((add) (three)(zero)), 3)
        self.assertEqual((unchurch_num) ((add) (num (77))(num (213))), 290)

        self.assertEqual((unchurch_num) ((sub) (zero)(zero)), 0)
        self.assertEqual((unchurch_num) ((sub) (zero)(one)), 0)
        self.assertEqual((unchurch_num) ((sub) (three)(zero)), 3)
        self.assertEqual((unchurch_num) ((sub) (num (213))(num (77))), 136)

        self.assertEqual((unchurch_num) ((mult) (zero)(zero)), 0)
        self.assertEqual((unchurch_num) ((mult) (three)(zero)), 0)
        self.assertEqual((unchurch_num) ((mult) (num (13))(num (99))), 1287)
        self.assertEqual((unchurch_num) ((mult) (one)(num (121))), 121)

        self.assertEqual((unchurch_num) ((div) (num (8)) (two)), 4)
        self.assertEqual((unchurch_num) ((div) (zero) (three)), 0)
        self.assertEqual((unchurch_num) ((div) (num (99)) (num (4))), 24)
        self.assertEqual((unchurch_num) ((div) (num (420)) (num (20))), 21)

        self.assertEqual((unchurch_num) ((exp) (zero) (zero)), 1)
        self.assertEqual((unchurch_num) ((exp) (zero) (three)), 0)
        self.assertEqual((unchurch_num) ((exp) (two) (num (8))), 256)
        self.assertEqual((unchurch_num) ((exp) (num (133)) (one)), 133)
     
        self.assertEqual((unchurch_num) ((fac) (zero)), 1)
        self.assertEqual((unchurch_num) ((fac) (one)), 1)
        self.assertEqual((unchurch_num) ((fac) (three)), 6)
        self.assertEqual((unchurch_num) ((fac) (num (5))), 120)
        self.assertEqual((unchurch_num) ((fac) (num (7))), 5040)
예제 #3
0
    def test_comparison_operators(self):
        self.assertTrue ((unchurch_bool) ((is_zero) (zero)))
        self.assertEqual((unchurch_bool) ((is_zero) (one)), False)

        self.assertEqual((unchurch_bool) ((lt) (zero)(zero)), False)
        self.assertEqual((unchurch_bool) ((lt) (num (7))(num (7))), False)
        self.assertEqual((unchurch_bool) ((lt) (num (14))(one)), False)
        self.assertTrue ((unchurch_bool) ((lt) (one)(two)))

        self.assertTrue ((unchurch_bool) ((leq) (zero)(zero)))
        self.assertTrue ((unchurch_bool) ((leq) (num (7))(num (7))))
        self.assertEqual((unchurch_bool) ((leq) (num (14))(one)), False)
        self.assertTrue ((unchurch_bool) ((leq) (one)(two)))

        self.assertTrue ((unchurch_bool) ((eq) (zero)(zero)))
        self.assertTrue ((unchurch_bool) ((eq) (num (7))(num (7))))
        self.assertEqual((unchurch_bool) ((eq) (num (14))(one)), False)
        self.assertEqual((unchurch_bool) ((eq) (one)(two)), False)

        self.assertTrue ((unchurch_bool) ((geq) (zero)(zero)))
        self.assertTrue ((unchurch_bool) ((geq) (num (7))(num (7))))
        self.assertTrue ((unchurch_bool) ((geq) (num (14))(one)))
        self.assertEqual((unchurch_bool) ((geq) (one)(two)), False)

        self.assertEqual((unchurch_bool) ((gt) (zero)(zero)), False)
        self.assertEqual((unchurch_bool) ((gt) (num (7))(num (7))), False)
        self.assertTrue ((unchurch_bool) ((gt) (num (14))(one)))
        self.assertEqual((unchurch_bool) ((gt) (one)(two)), False)
예제 #4
0
    def test_arithmetic_operators_Z(self):
        self.assertEqual((unchurch_int) ((addZ) ((convertNZ) (zero))
                                                ((convertNZ) (zero))), 0)
        self.assertEqual((unchurch_int) ((addZ) ((convertNZ) (zero))
                                                ((convertNZ) (one))), 1)
        self.assertEqual((unchurch_int) ((addZ) ((convertNZ) (three))
                                                ((convertNZ) (zero))), 3)
        self.assertEqual((unchurch_int) ((addZ) ((convertNZ) (num (77)))
                                         ((neg) ((convertNZ) (num (213))))), -136)

        self.assertEqual((unchurch_int) ((subZ) ((convertNZ) (zero))
                                                ((convertNZ) (zero))), 0)
        self.assertEqual((unchurch_int) ((subZ) ((convertNZ) (zero))
                                                ((convertNZ) (one))), -1)
        self.assertEqual((unchurch_int) ((subZ) ((neg) ((convertNZ) (num (14))))
                                                ((convertNZ) (num (99)))), -113)
        self.assertEqual((unchurch_int) ((subZ) ((convertNZ) (num (213)))
                                                ((convertNZ) (num (77)))), 136)
        self.assertEqual((unchurch_int) ((subZ) ((neg) ((convertNZ) (num (3))))
                                                ((neg) ((convertNZ) (num (99))))), 96)

        self.assertEqual((unchurch_int) ((multZ) ((convertNZ) (zero))
                                                 ((convertNZ) (zero))), 0)
        self.assertEqual((unchurch_int) ((multZ) ((convertNZ) (three))
                                                 ((convertNZ) (zero))), 0)
        self.assertEqual((unchurch_int) ((multZ) ((neg) ((convertNZ) (num (3))))
                                                 ((convertNZ) (num (99)))), -297)
        self.assertEqual((unchurch_int) ((multZ) ((neg) ((convertNZ) (one)))
                                                 ((neg) ((convertNZ) (num (121))))), 121)

        self.assertEqual((unchurch_int) ((divZ) ((convertNZ) (num (8)))
                                                ((convertNZ) (two))), 4)
        self.assertEqual((unchurch_int) ((divZ) ((convertNZ) (zero))
                                                ((convertNZ) (three))), 0)
        self.assertEqual((unchurch_int) ((divZ) ((neg) ((convertNZ) (num (99))))
                                                ((convertNZ) (num (4)))), -24)
        self.assertEqual((unchurch_int) ((divZ) ((neg) ((convertNZ) (num (275))))
                                                ((neg) ((convertNZ) (num (25))))), 11)
예제 #5
0
 def test_integers(self):
     self.assertEqual((unchurch_int) ((convertNZ) (zero)), 0)
     self.assertEqual((unchurch_int) ((convertNZ) (three)), 3)
     self.assertEqual((unchurch_int) ((convertNZ) (num (45))), 45)
     self.assertEqual((unchurch_int) ((neg) ((convertNZ) (zero))), 0)
     self.assertEqual((unchurch_int) ((neg) ((convertNZ) (num (27)))), -27)
예제 #6
0
 def test_lists(self):
     clist = (cons) (num (4))((cons) (three)((cons) (two)((cons) (one)(true))))
     self.assertEqual((unchurch_num) ((car) (clist)), 4)
     self.assertEqual((unchurch_num) ((car) ((cdr) (clist))), 3)
     self.assertEqual((unchurch_num) ((car) ((cdr) ((cdr) (clist)))), 2)
     self.assertEqual((unchurch_num) ((car) ((cdr) ((cdr) ((cdr) (clist))))), 1)