From d973f28294d93cf54de9b2b87d4cc8524bb8a28a Mon Sep 17 00:00:00 2001 From: Dmitry Vyukov Date: Wed, 31 Jan 2018 20:21:01 +0100 Subject: 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. --- prog/encoding_test.go | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) (limited to 'prog/encoding_test.go') 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 +} -- cgit mrf-deployment