{-# OPTIONS_GHC -Wno-unrecognised-pragmas #-} {-# HLINT ignore "Use void" #-} import Test.HUnit data Complex a = TODO instance (Show a, Num a, Eq a) => Show (Complex a) where -- show :: (Show a, Num a, Eq a) => Complex a -> String -- TODO instance (Num a, Floating a) => Num (Complex a) where -- (+) :: (Num a, Floating a) => Complex a -> Complex a -> Complex a -- (*) :: (Num a, Floating a) => Complex a -> Complex a -> Complex a -- TODO -- abs (Complex re im) = TODO -- signum (Complex re im) = TODO -- fromInteger n = TODO -- negate :: (Num a, Floating a) => Complex a -> Complex a -- negate (Complex re im) = Complex (negate re) (negate im) instance (Fractional a, Floating a) => Fractional (Complex a) where -- fromRational r = TODO -- recip (Complex re im) = TODO -- (Complex re1 im1) / (Complex re2 im2) = TODO -- conj :: Num a => Complex a -> Complex a -- TODO tests :: Test tests = TestList [ -- Test.HUnit.TestCase (assertEqual "Show 1+2i" "1+2i" (show $ Complex 1 2)), -- Test.HUnit.TestCase (assertEqual "Show 1" "1" (show $ Complex 1 0)), -- Test.HUnit.TestCase (assertEqual "Show i" "i" (show i)), -- Test.HUnit.TestCase (assertEqual "Show 5i" "5i" (show $ Complex 0 5)), -- Test.HUnit.TestCase (assertEqual "Show 0" "0" (show $ Complex 0 0)), -- Test.HUnit.TestCase (assertEqual "Compare Equal" True (Complex 2 3 == Complex 2 3)), -- Test.HUnit.TestCase (assertEqual "Compare Real Not Equal" False (Complex 1 3 == Complex 2 3)), -- Test.HUnit.TestCase -- (assertEqual "Compare Imag Not Equal" False (Complex 2 4 == Complex 2 3)), -- Test.HUnit.TestCase -- (assertEqual "Compare Not Equal" False (Complex 2 3 /= Complex 2 3)), -- Test.HUnit.TestCase -- ( assertEqual -- "Addition 1" -- (Complex 6.0 8.0) -- (Complex 2.0 3.0 + Complex 4.0 5.0) -- ), -- Test.HUnit.TestCase -- ( assertEqual -- "Addition 2" -- (Complex 2.0 3.0) -- (Complex 0.0 3.0 + Complex 2.0 0.0) -- ), -- Test.HUnit.TestCase -- ( assertEqual -- "Subtraction 1" -- (Complex 4.0 (-4.0)) -- (Complex 7.0 2.0 - Complex 3.0 6.0) -- ), -- Test.HUnit.TestCase -- ( assertEqual -- "Subtraction 2" -- (Complex 4.0 2.0) -- (Complex 5.0 4.0 - Complex 1.0 2.0) -- ), -- Test.HUnit.TestCase -- ( assertEqual -- "Negation" -- (Complex (-7.0) (-2.0)) -- (negate (Complex 7.0 2.0)) -- ), -- Test.HUnit.TestCase -- ( assertEqual -- "Multiplication 1" -- (Complex (-5.0) 10.0) -- (Complex 1.0 2.0 * Complex 3.0 4.0) -- ), -- Test.HUnit.TestCase -- ( assertEqual -- "Multiplication 2" -- (Complex 5.0 1.0) -- (Complex 2.0 3.0 * Complex 1.0 (-1.0)) -- ), -- Test.HUnit.TestCase -- ( assertEqual -- "Multiplication 3" -- (Complex 11.0 (-10.0)) -- (Complex 4.0 1.0 * Complex 2.0 (-3.0)) -- ), -- Test.HUnit.TestCase -- ( assertEqual -- "Multiplication 4" -- (Complex 5.0 12.0) -- (Complex 3.0 2.0 * Complex 3.0 2.0) -- ), -- Test.HUnit.TestCase -- ( assertEqual -- "Magnitude 1" -- (Complex 5.0 0.0) -- (abs (Complex 3.0 4.0)) -- ), -- Test.HUnit.TestCase -- ( assertEqual -- "Magnitude 2" -- (Complex (sqrt 2.0) 0.0) -- (abs (Complex 1.0 (-1.0))) -- ), -- Test.HUnit.TestCase -- ( assertEqual -- "Magnitude 3" -- (Complex 5.0 0.0) -- (abs (Complex 0.0 5.0)) -- ), -- TestCase (assertEqual "Conjugate of 3+4i" (Complex 3 (-4)) (conj (Complex 3 4))), -- TestCase (assertEqual "Conjugate of 5-i" (Complex 5 1) (conj (Complex 5 (-1)))), -- TestCase (assertEqual "Conjugate of -2+3i" (Complex (-2) (-3)) (conj (Complex (-2) 3))) ] main :: IO () main = runTestTT tests >> return ()