Пример #1
0
    def test_traverse_some(self):
        xs = toLinkedList([1, 2, 3])

        def add1A(x):
            return some(x + 1)

        self.assertEqual(Option.traverse(add1A, xs),
                         some(toLinkedList([2, 3, 4])))
Пример #2
0
    def test_functor_associativity_law(self):
        a = some(1)

        def f(x):
            return x + 1

        def g(x):
            return x * 2

        self.assertEqual(a.map(f).map(g), a.map(f | andThen | g))
Пример #3
0
    def test_ap(self):
        def add(x):
            return lambda y: x + y

        self.assertEqual(some(add).ap(some(1)).ap(some(2)), some(3))
        self.assertEqual(some(add).ap(nothing).ap(some(2)), nothing)
Пример #4
0
    def test_map(self):
        def f(x):
            return x + 1

        self.assertEqual(some(1).map(f), some(2))
        self.assertEqual(nothing.map(f), nothing)
Пример #5
0
 def test_functor_identity_law(self):
     a = some(1)
     self.assertEqual(identity(a), a.map(identity))
     self.assertEqual(identity(nothing), nothing.map(identity))
Пример #6
0
 def test_isSome(self):
     self.assertFalse(nothing.isSome())
     self.assertTrue(some(1).isSome())
Пример #7
0
 def oddA(x):
     if x % 2 == 1:
         return some(x)
     else:
         return nothing
Пример #8
0
 def add1A(x):
     return some(x + 1)
Пример #9
0
 def test_sequence_nothing(self):
     self.assertEqual(
         Option.sequence(toLinkedList([some(1), nothing,
                                       some(3)])), nothing)
Пример #10
0
 def test_sequence_some(self):
     xs = toLinkedList([some(1), some(2), some(3)])
     self.assertEqual(Option.sequence(xs), some(toLinkedList([1, 2, 3])))
Пример #11
0
    def test_fold(self):
        def toStr(a, z):
            return str(a) + ", " + z

        self.assertEqual(some(1).fold(toStr, "0"), "1, 0")
        self.assertEqual(nothing.fold(toStr, "0"), "0")
Пример #12
0
 def test_eq_some(self):
     self.assertEqual(some(1), some(1))
     self.assertNotEqual(some(0), some(1))
Пример #13
0
 def add1M(x):
     return some(x + 1)
Пример #14
0
    def test_bind(self):
        def add1M(x):
            return some(x + 1)

        self.assertEqual(some(2).bind(add1M), some(3))
        self.assertEqual(nothing.bind(add1M), nothing)