diff options
| author | Dmitry Vyukov <dvyukov@google.com> | 2018-01-31 20:21:01 +0100 |
|---|---|---|
| committer | Dmitry Vyukov <dvyukov@google.com> | 2018-02-01 15:20:12 +0100 |
| commit | d973f28294d93cf54de9b2b87d4cc8524bb8a28a (patch) | |
| tree | a88c26c1e1de0afa0340e7213b2738f81f40bb22 /prog/encoding_test.go | |
| parent | a84dec47f0bdc461828c2903429e669fc0fa5e10 (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.go | 43 |
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 +} |
