def test_vector_function_add_happy_path(self): def f(x, y): return x + y def g(x, y): return x + y + 1 vector_f = Function2(f) vector_g = Function2(g) self.assertEqual((vector_f + vector_g)(5, 6), 23)
def test_vector_negate_happy_path(self): def f(x, y): return x + y vector_f = Function2(f) self.assertEqual(-vector_f(5, 6), -11)
def test_vector_function_mult_happy_path(self): def f(x, y): return x + y vector_f = Function2(f) self.assertEqual(5 * vector_f(5, 6), 55)
def test_approx_equal_function_happy_path_3(self): f = Function2(lambda x, y: x + y) g = Function2(lambda x, y: x - y + 1) h = Function2(lambda x, y: 2 * x + 1) self.assertTrue(self.approx_equal(f + g, h))
def test_approx_equal_function_happy_path_2(self): f1 = Function2(lambda x, y: x + y + 1) f2 = Function2(lambda x, y: sin(x) + sin(y)) self.assertFalse(self.approx_equal(f1, f2))
def test_approx_equal_function_happy_path(self): f1 = Function2(lambda x, y: x + y + 1) f2 = Function2(lambda x, y: x + y + 0.5 * 2) self.assertTrue(self.approx_equal(f1, f2))
def test_zero_function_happy_path(self): vector_f0 = Function2.zero() for _ in range(0, 1000): self.assertEqual( vector_f0(self.random_scalar(), self.random_scalar()), 0)
def test_vector_function_creation_happy_path(self): def f(x, y): return x + y vector_f = Function2(f) self.assertEqual(vector_f(5, 7), 12)
def test_vector_function_creation_with_num(self): with self.assertRaises( TypeError, msg='should raise TypeError when passing non-function arg'): Function2(2)