Compare results of compress by hashing
authorSebastian Graf <sgraf1337@gmail.com>
Wed, 26 Dec 2018 12:45:33 +0000 (13:45 +0100)
committerSebastian Graf <sgraf1337@gmail.com>
Wed, 26 Dec 2018 13:04:37 +0000 (14:04 +0100)
Summary:
We don't want the result in the repo as it's a sizeable binary file that
doesn't compress well.

Storing the output file in the repository becomes infeasible for large
inputs. There are two possible remedies:

1. Generate the result files during `make boot` (Phab:D5426). We
   discovered some drawbacks (like missing dependency files to build
   `compress` during boot) to this approach which make it infeasible.
2. Shrink the output files, for example by hashing the string that we would
   normally output and compare that instead.

This patch implements the second alternative. This somewhat distorts the
runtime profile, so we might want to consider doing hashing within the
benchmark runner in the future.

Test Plan: make boot

Reviewers: AndreasK, nomeata, O26 nofib, osa1

Reviewed By: AndreasK, osa1

Subscribers: osa1

Differential Revision: https://phabricator.haskell.org/D5469

.gitignore
real/compress/Main.hs
real/compress/Makefile
real/compress/compress.faststdout
real/compress/compress.stdout [new file with mode: 0644]

index c69af58..f1fae44 100644 (file)
@@ -34,7 +34,6 @@ real/bspt/bspt
 real/cacheprof/cacheprof
 real/compress/compress
 real/compress/compress.stdin
-real/compress/compress.stdout
 real/compress2/compress2
 real/compress2/compress2.stdin
 real/compress2/compress2.stdout
index 28ff58c..ec43fbb 100644 (file)
@@ -16,13 +16,17 @@ module Main (main) where
 import Defaults
 import BinConv   -- binary conversion routines
 import Encode     -- coding routine
+import Data.Char
+import Data.List (foldl')
 import System.IO
 
+hash :: String -> Int
+hash = foldl' (\acc c -> ord c + acc*31) 0
+
 main = do
   hSetBinaryMode stdin  True
-  hSetBinaryMode stdout True
   inp <- getContents
-  putStr (compress inp)
+  print (hash (compress inp))
 
 {- To compress a string we first encode it, then convert it to n-bit binaries
  - convert back to decimal as ascii-bit values and then to characters
index f366d2c..ba4074e 100644 (file)
@@ -1,20 +1,15 @@
 TOP = ../..
 include $(TOP)/mk/boilerplate.mk
 
-SRC_RUNTEST_OPTS += -stdout-binary
-
 SRCS = BinConv.hs BinTest.hs Decode.hs Defaults.hs Encode.hs Main.hs PTTrees.hs Uncompress.hs
 
-CLEAN_FILES += compress.stdin compress.stdout
+CLEAN_FILES += compress.stdin
 
 Lzw_HC_OPTS = -cpp
 
 include $(TOP)/mk/target.mk
 
-boot :: compress.stdin compress.faststdin compress.stdout
+boot :: compress.stdin
 
 compress.stdin : compress.faststdin
        cat compress.faststdin *.hs *.c compress.faststdin *.hs *.c compress.faststdin > compress.stdin
-
-compress.stdout : compress.stdin compress
-       ./compress < compress.stdin > compress.stdout
index 3bfe8cb..ac69d34 100644 (file)
Binary files a/real/compress/compress.faststdout and b/real/compress/compress.faststdout differ
diff --git a/real/compress/compress.stdout b/real/compress/compress.stdout
new file mode 100644 (file)
index 0000000..86e4101
--- /dev/null
@@ -0,0 +1 @@
+-172666309241294456