54d2fecee0
- 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
66 lines
2.1 KiB
Haskell
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 |