diff options
author | Csaba Hruska <csaba.hruska@gmail.com> | 2016-02-17 13:32:39 +0100 |
---|---|---|
committer | Csaba Hruska <csaba.hruska@gmail.com> | 2016-02-17 13:32:39 +0100 |
commit | a4d0106183850b6e06b42ee10b51ad46716a6672 (patch) | |
tree | 33165b1171cf8655902bb2f36d10b615bea72e2e /backendtest | |
parent | 5c6d3a26ef2de9a4bf7992e4eb0406d7bbcff5bd (diff) |
improve backend test
Diffstat (limited to 'backendtest')
-rw-r--r-- | backendtest/TestServer.hs | 24 |
1 files changed, 18 insertions, 6 deletions
diff --git a/backendtest/TestServer.hs b/backendtest/TestServer.hs index a84fc72b..07d38dbe 100644 --- a/backendtest/TestServer.hs +++ b/backendtest/TestServer.hs | |||
@@ -15,6 +15,7 @@ import qualified Data.Map as Map | |||
15 | import Text.Printf | 15 | import Text.Printf |
16 | import System.FilePath | 16 | import System.FilePath |
17 | import System.Directory | 17 | import System.Directory |
18 | import System.Process | ||
18 | 19 | ||
19 | import TestData | 20 | import TestData |
20 | import LambdaCube.Linear | 21 | import LambdaCube.Linear |
@@ -44,9 +45,9 @@ application pending = do | |||
44 | (testName,renderJob@RenderJob{..}) <- EditorExamplesTest.getRenderJob -- TODO | 45 | (testName,renderJob@RenderJob{..}) <- EditorExamplesTest.getRenderJob -- TODO |
45 | WS.sendTextData conn . encode $ renderJob | 46 | WS.sendTextData conn . encode $ renderJob |
46 | -- get render result: pipeline x scene x frame | 47 | -- get render result: pipeline x scene x frame |
47 | forM_ pipelines $ \PipelineInfo{..} -> do | 48 | res <- forM pipelines $ \PipelineInfo{..} -> do |
48 | forM_ (zip [one..] $ V.toList scenes) $ \(sIdx,Scene{..}) -> | 49 | forM (zip [one..] $ V.toList scenes) $ \(sIdx,Scene{..}) -> |
49 | forM_ [one..length frames] $ \fIdx -> do | 50 | forM [one..length frames] $ \fIdx -> do |
50 | let name = "backend-test-data/" ++ testName ++ "/result/" ++ takeBaseName pipelineName ++ "_scn" ++ printf "%02d" sIdx ++ "_" ++ printf "%02d" fIdx ++ ".png" | 51 | let name = "backend-test-data/" ++ testName ++ "/result/" ++ takeBaseName pipelineName ++ "_scn" ++ printf "%02d" sIdx ++ "_" ++ printf "%02d" fIdx ++ ".png" |
51 | decodeStrict <$> WS.receiveData conn >>= \case | 52 | decodeStrict <$> WS.receiveData conn >>= \case |
52 | Nothing -> fail $ name ++ " - invalid RenderJobResult" | 53 | Nothing -> fail $ name ++ " - invalid RenderJobResult" |
@@ -55,7 +56,8 @@ application pending = do | |||
55 | createDirectoryIfMissing True (takeDirectory name) | 56 | createDirectoryIfMissing True (takeDirectory name) |
56 | compareOrSaveImage name =<< toImage frImageWidth frImageHeight . either error id . B64.decode =<< WS.receiveData conn | 57 | compareOrSaveImage name =<< toImage frImageWidth frImageHeight . either error id . B64.decode =<< WS.receiveData conn |
57 | --putStrLn $ name ++ "\t" ++ unwords (map showTime . V.toList $ frRenderTimes) | 58 | --putStrLn $ name ++ "\t" ++ unwords (map showTime . V.toList $ frRenderTimes) |
58 | putStrLn "render job done" | 59 | let differ = or $ concat $ fmap concat res |
60 | putStrLn $ "render job: " ++ if differ then "FAIL" else "OK" | ||
59 | forever $ threadDelay 1000000 | 61 | forever $ threadDelay 1000000 |
60 | 62 | ||
61 | compareOrSaveImage name img@(Image w h pixels) = do | 63 | compareOrSaveImage name img@(Image w h pixels) = do |
@@ -63,15 +65,25 @@ compareOrSaveImage name img@(Image w h pixels) = do | |||
63 | False -> do | 65 | False -> do |
64 | putStrLn $ "new image: " ++ name | 66 | putStrLn $ "new image: " ++ name |
65 | savePngImage name (ImageRGBA8 img) | 67 | savePngImage name (ImageRGBA8 img) |
68 | return False | ||
66 | True -> do | 69 | True -> do |
67 | Right (ImageRGBA8 (Image origW origH origPixels)) <- readImage name | 70 | Right (ImageRGBA8 (Image origW origH origPixels)) <- readImage name |
68 | let diffPixels a b = SV.sum $ SV.zipWith (\x y -> (fromIntegral x - fromIntegral y)^2) a b :: Float | 71 | let diffPixels a b = SV.sum $ SV.zipWith (\x y -> (fromIntegral x - fromIntegral y)^2) a b :: Float |
69 | diff = diffPixels pixels origPixels | 72 | diff = diffPixels pixels origPixels |
70 | threshold = 0 | 73 | threshold = 0 |
71 | case (w /= origW || h /= origH || diff > threshold) of | 74 | differ = w /= origW || h /= origH || diff > threshold |
75 | case differ of | ||
72 | True -> do | 76 | True -> do |
73 | fail $ name ++ " - differ!!! " ++ show diff | 77 | putStrLn $ name ++ " - differ!!! " ++ show diff |
78 | let mismatchImage = dropExtension name ++ "_mismatch.png" | ||
79 | diffImage = dropExtension name ++ "_diff.png" | ||
80 | putStrLn $ "save difference: " ++ diffImage | ||
81 | savePngImage mismatchImage (ImageRGBA8 img) | ||
82 | (exitCode,out,err) <- readProcessWithExitCode "compare" ["-compose","src",name,mismatchImage,diffImage] "" | ||
83 | --let res = read . head . words $ out :: Float | ||
84 | print (out,err) | ||
74 | False -> putStrLn $ name ++ " OK" | 85 | False -> putStrLn $ name ++ " OK" |
86 | return differ | ||
75 | 87 | ||
76 | toImage :: Int -> Int -> BS.ByteString -> IO (Image PixelRGBA8) | 88 | toImage :: Int -> Int -> BS.ByteString -> IO (Image PixelRGBA8) |
77 | toImage w h buf = do | 89 | toImage w h buf = do |