Files
print_hej/haskell/src/PiTest.hs
T
Ein Anderssono 54d2fecee0 Initial commit: Pi calculation benchmark with 34 languages
- Added implementations for: bash, brainfuck, c, cpp, crystal, csharp, d, dart, elixir, erlang, fortran, go, haskell, java, javascript, julia, kotlin, objective-c, scala, typescript, lua, nim, odin, perl, php, python, r, ruby, rust, swift, zig, assembly, vimscript, wolfram
- All implementations use Machin's formula: π/4 = 4*arctan(1/5) - arctan(1/239)
- Build system with ./build.sh, test system with ./test.sh
- Performance testing with ./run_all.sh
- Comprehensive README.md explaining performance differences
- Test framework verifies correctness against known π values
2026-04-23 00:26:18 +02:00

66 lines
2.1 KiB
Haskell

module Main where
import Test.HUnit
import System.Process
import Data.List (stripPrefix)
scriptPath :: String
scriptPath = "/Users/einand/Code/test/haskell/print_hej"
runScript :: Maybe String -> IO String
runScript mArgs = do
let args = maybe [] (\x -> [x]) mArgs
output <- readProcess scriptPath args ""
return $ init output -- Remove trailing newline
test10Decimals :: Test
test10Decimals = TestCase $ do
result <- runScript (Just "10")
let expected = "3.1415926535"
assertEqual "10 decimals" expected result
test5Decimals :: Test
test5Decimals = TestCase $ do
result <- runScript (Just "5")
let expected = "3.14159"
assertEqual "5 decimals" expected result
test1Decimal :: Test
test1Decimal = TestCase $ do
result <- runScript (Just "1")
let expected = "3.1"
assertEqual "1 decimal" expected result
test100Decimals :: Test
test100Decimals = TestCase $ do
result <- runScript (Just "100")
let expected = "3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679"
assertEqual "100 decimals" expected result
testDefault100Decimals :: Test
testDefault100Decimals = TestCase $ do
result <- runScript Nothing
let expected = "3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679"
assertEqual "default 100 decimals" expected result
test10000Decimals :: Test
test10000Decimals = TestCase $ do
result <- runScript (Just "10000")
-- Check length: "3." + 10000 digits = 10002 characters
assertEqual "10000 decimals length" 10002 (length result)
assertBool "10000 decimals starts with 3.14159" (take 7 result == "3.14159")
tests :: Test
tests = TestList [
TestLabel "test10Decimals" test10Decimals,
TestLabel "test5Decimals" test5Decimals,
TestLabel "test1Decimal" test1Decimal,
TestLabel "test100Decimals" test100Decimals,
TestLabel "testDefault100Decimals" testDefault100Decimals,
TestLabel "test10000Decimals" test10000Decimals
]
main :: IO ()
main = do
counts <- runTestTT tests
putStrLn $ showCounts counts