aboutsummaryrefslogtreecommitdiffstats
path: root/pkg/signal/signal.go
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/signal/signal.go')
-rw-r--r--pkg/signal/signal.go27
1 files changed, 24 insertions, 3 deletions
diff --git a/pkg/signal/signal.go b/pkg/signal/signal.go
index a22d19f67..ffa27ce97 100644
--- a/pkg/signal/signal.go
+++ b/pkg/signal/signal.go
@@ -146,7 +146,7 @@ type Context struct {
func Minimize(corpus []Context) []any {
type ContextPrio struct {
prio prioType
- idx int
+ idx []int
}
covered := make(map[elemType]ContextPrio)
for i, inp := range corpus {
@@ -154,14 +154,35 @@ func Minimize(corpus []Context) []any {
if prev, ok := covered[e]; !ok || p > prev.prio {
covered[e] = ContextPrio{
prio: p,
- idx: i,
+ idx: []int{i},
+ }
+ } else if prev := covered[e]; p == prev.prio {
+ covered[e] = ContextPrio{
+ prio: p,
+ idx: append(prev.idx, i),
}
}
}
}
indices := make(map[int]struct{}, len(corpus))
for _, cp := range covered {
- indices[cp.idx] = struct{}{}
+ if len(cp.idx) == 1 {
+ indices[cp.idx[0]] = struct{}{}
+ }
+ }
+ for _, cp := range covered {
+ if len(cp.idx) != 1 {
+ alreadyCovered := false
+ for pc := range cp.idx {
+ if _, ok := indices[pc]; ok {
+ alreadyCovered = true
+ break
+ }
+ }
+ if !alreadyCovered {
+ indices[cp.idx[0]] = struct{}{}
+ }
+ }
}
result := make([]any, 0, len(indices))
for idx := range indices {