aboutsummaryrefslogtreecommitdiffstats
path: root/prog/encoding_test.go
diff options
context:
space:
mode:
authorDmitry Vyukov <dvyukov@google.com>2018-01-31 20:21:01 +0100
committerDmitry Vyukov <dvyukov@google.com>2018-02-01 15:20:12 +0100
commitd973f28294d93cf54de9b2b87d4cc8524bb8a28a (patch)
treea88c26c1e1de0afa0340e7213b2738f81f40bb22 /prog/encoding_test.go
parenta84dec47f0bdc461828c2903429e669fc0fa5e10 (diff)
prog: don't serialize default arguments
This reduces size of a corpus in half. We store corpus on manager and on hub, so this will reduce their memory consumption. But also makes large programs more readable.
Diffstat (limited to 'prog/encoding_test.go')
-rw-r--r--prog/encoding_test.go43
1 files changed, 43 insertions, 0 deletions
diff --git a/prog/encoding_test.go b/prog/encoding_test.go
index 6c063b5a7..da90c6bbe 100644
--- a/prog/encoding_test.go
+++ b/prog/encoding_test.go
@@ -188,3 +188,46 @@ func TestSerializeDeserialize(t *testing.T) {
}
}
}
+
+func TestSerializeDeserializeRandom(t *testing.T) {
+ testEachTargetRandom(t, func(t *testing.T, target *Target, rs rand.Source, iters int) {
+ data0 := make([]byte, ExecBufferSize)
+ data1 := make([]byte, ExecBufferSize)
+ for i := 0; i < iters; i++ {
+ p0 := target.Generate(rs, 10, nil)
+ if ok, _, _ := testSerializeDeserialize(t, p0, data0, data1); ok {
+ continue
+ }
+ p0, _ = Minimize(p0, -1, func(p1 *Prog, _ int) bool {
+ ok, _, _ := testSerializeDeserialize(t, p1, data0, data1)
+ return !ok
+ }, false)
+ ok, n0, n1 := testSerializeDeserialize(t, p0, data0, data1)
+ if ok {
+ t.Fatal("flaky?")
+ }
+ t.Fatalf("was: %q\ngot: %q\nprogram:\n%s",
+ data0[:n0], data1[:n1], p0.Serialize())
+ }
+ })
+}
+
+func testSerializeDeserialize(t *testing.T, p0 *Prog, data0, data1 []byte) (bool, int, int) {
+ n0, err := p0.SerializeForExec(data0)
+ if err != nil {
+ t.Fatal(err)
+ }
+ serialized := p0.Serialize()
+ p1, err := p0.Target.Deserialize(serialized)
+ if err != nil {
+ t.Fatal(err)
+ }
+ n1, err := p1.SerializeForExec(data1)
+ if err != nil {
+ t.Fatal(err)
+ }
+ if !bytes.Equal(data0[:n0], data1[:n1]) {
+ return false, n0, n1
+ }
+ return true, 0, 0
+}