def test_static_constructor(self): self.assertEqual(monad.Empty(), monad.Option.from_value(None)) self.assertEqual(monad.Full(10), monad.Option.from_value(10)) self.assertEqual(monad.Empty(), monad.Option.from_call(lambda: None)) self.assertEqual(monad.Full(10), monad.Option.from_call(operator.add, 8, 2)) self.assertEqual(monad.Empty(), monad.Option.from_call(lambda d, k: d[k], {"a":1}, "b", exc=KeyError))
def test_flatten_operation(self): self.assertEqual(monad.Empty(), monad.Empty(monad.Empty())) self.assertEqual(monad.Empty(), monad.Empty(monad.Full(10))) self.assertEqual(monad.Empty(), monad.Full(monad.Empty())) self.assertEqual("Full(20)", str(monad.Full(monad.Full(20))))
def test_option_repr(self): self.assertEqual("Full(10)", repr(monad.Full(10))) self.assertEqual("Full(in box!)", repr(monad.Full("in box!"))) self.assertEqual("Empty()", repr(monad.Empty())) self.assertEqual("Empty()", repr(monad.Option(None)))
def test_stringify(self): self.assertEqual("Full(10)", str(monad.Full(10))) self.assertEqual("Full(in box!)", str(monad.Full("in box!"))) self.assertEqual("Empty()", str(monad.Empty())) self.assertEqual("Empty()", str(monad.Option(None)))
def test_empty_check(self): self.assertTrue(monad.Empty().empty) self.assertTrue(monad.Option(None).empty) self.assertTrue(monad.Option.from_call(lambda: None).empty) self.assertFalse(monad.Option(10).empty) self.assertFalse(monad.Full(10).empty)