mirror of
https://github.com/go-gitea/gitea
synced 2024-08-27 17:53:41 +02:00
Many places have the following logic: ```go func (jobs ActionJobList) GetRunIDs() []int64 { ids := make(container.Set[int64], len(jobs)) for _, j := range jobs { if j.RunID == 0 { continue } ids.Add(j.RunID) } return ids.Values() } ``` this introduces a `container.FilterMapUnique` function, which reduces the code above to: ```go func (jobs ActionJobList) GetRunIDs() []int64 { return container.FilterMapUnique(jobs, func(j *ActionRunJob) (int64, bool) { return j.RunID, j.RunID != 0 }) } ```
29 lines
577 B
Go
29 lines
577 B
Go
// Copyright 2024 The Gitea Authors. All rights reserved.
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
package container
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestFilterMapUnique(t *testing.T) {
|
|
result := FilterSlice([]int{
|
|
0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
|
|
}, func(i int) (int, bool) {
|
|
switch i {
|
|
case 0:
|
|
return 0, true // included later
|
|
case 1:
|
|
return 0, true // duplicate of previous (should be ignored)
|
|
case 2:
|
|
return 2, false // not included
|
|
default:
|
|
return i, true
|
|
}
|
|
})
|
|
assert.Equal(t, []int{0, 3, 4, 5, 6, 7, 8, 9}, result)
|
|
}
|