aboutsummaryrefslogtreecommitdiffstats
path: root/pkg/corpus/minimize.go
diff options
context:
space:
mode:
authorGrigory Bazilevich <g.bazilevich@ispras.ru>2026-03-11 09:44:38 +0300
committerGrigory Bazilevich <g.bazilevich@ispras.ru>2026-03-11 09:44:38 +0300
commit3fe1aeddbc74e43e8561db61cdaad620c5993d92 (patch)
tree5110374b616f67a69c5e6161ff56afabec35ce7d /pkg/corpus/minimize.go
parenta68fda52c366653ed73c240a6b9c3f4e750ccdfd (diff)
pkg/corpus: upgrade corpus minimization algorithm
Diffstat (limited to 'pkg/corpus/minimize.go')
-rw-r--r--pkg/corpus/minimize.go21
1 files changed, 20 insertions, 1 deletions
diff --git a/pkg/corpus/minimize.go b/pkg/corpus/minimize.go
index d01e06f57..d3d68ee27 100644
--- a/pkg/corpus/minimize.go
+++ b/pkg/corpus/minimize.go
@@ -41,11 +41,30 @@ func (corpus *Corpus) Minimize(cover bool) {
// Overwrite the program lists.
corpus.ProgramsList = &ProgramsList{}
+ corpus.ProgramsList.prios.reserve(len(inputs))
for _, area := range corpus.focusAreas {
area.ProgramsList = &ProgramsList{}
}
- for _, ctx := range signal.Minimize(inputs) {
+ progs := signal.Minimize(inputs)
+
+ sort.SliceStable(progs, func(i, j int) bool {
+ first := progs[i].(*Item)
+ second := progs[j].(*Item)
+ return first.ExecLast > second.ExecLast
+ })
+
+ inputs = make([]signal.Context, 0, len(progs))
+ for _, inp := range progs {
+ inputs = append(inputs, signal.Context{
+ Signal: inp.(*Item).StableSignal,
+ Context: inp,
+ })
+ }
+ progs = signal.Minimize(inputs)
+
+ for _, ctx := range progs {
inp := ctx.(*Item)
+
corpus.progsMap[inp.Sig] = inp
corpus.saveProgram(inp.Prog, inp.Signal)
for area := range inp.areas {