def test_composition(self): self.assertEqual( _run( self._class.insert(1).map( lambda x: common_tests.sub(2, common_tests.add(1, x)))), _run( self._class.insert(1).map(common_tests.add(1)).map( common_tests.sub(2))))
def test_application_is_associative(self): self.assertEqual( _run( self._class.apply(common_tests.add).to_arguments( self._class.insert(1), self._class.insert(2))), _run( self._class.apply( lambda args: common_tests.add(*args)).to_arguments( self._class.apply(lambda b: (1, b)).to_arguments( self._class.insert(2)))))
def test_application_is_same_as_mapping(self): f = common_tests.add(1) self.assertEqual( _run(self._class.apply(f).to_arguments(self._class.insert(2))), _run(self._class.insert(2).map(f)))
def test_application_is_homomorphic(self): f = common_tests.add(1) self.assertEqual( _run(self._class.insert(f(2))), _run(self._class.apply(f).to_arguments(self._class.insert(2))))
def test_apply_then_insert(self): self.assertEqual(_run(self._class.insert(1).map(common_tests.add(1))), _run(self._class.insert(common_tests.add(1, 1))))
def test_then_with_normal_function(self): self.assertEqual(_run(self._class.insert(0).then(common_tests.add(1))), _run(self._class.insert(1)))