1
0
Fork 0

Added tests to the main package and completely reworked the code around that

This commit is contained in:
Julien Dessaux 2020-02-24 23:05:45 +01:00
parent 2661ce9a2b
commit cadb15f7af
17 changed files with 285 additions and 239 deletions

View file

@ -1,25 +1,32 @@
package job
// KeepOldestOnly filters a job list and keeps only the most recent entry for a job name
func KeepOldestOnly(jobs []Job) []Job {
tmpMap := make(map[string]Job)
for _, elt := range jobs {
prev, exists := tmpMap[elt.Name]
if !exists || (exists && prev.Timestamp < elt.Timestamp) {
tmpMap[elt.Name] = elt
func KeepOldestOnly(jobs []Job) (results []Job) {
outerLoop:
for i := 0; i < len(jobs); i++ {
job := jobs[i]
for j := 0; j < len(results); j++ {
result := results[j]
if result.Name == job.Name {
continue outerLoop
}
}
for j := i + 1; j < len(jobs); j++ {
sec := jobs[j]
if sec.Name == job.Name && sec.Timestamp > job.Timestamp {
job = sec
}
}
results = append(results, job)
}
values := make([]Job, 0, len(tmpMap))
for _, value := range tmpMap {
values = append(values, value)
}
return values
return
}
// KeepSuccessOnly returns only the successful jobs from a job list (suiatble to write a new spool file)
func KeepSuccessOnly(jobs []Job) (result []Job) {
result = make([]Job, 0)
for _, job := range jobs {
for i := 0; i < len(jobs); i++ {
job := jobs[i]
if job.Success {
result = append(result, job)
}

View file

@ -9,8 +9,13 @@ func TestKeepOldestOnly(t *testing.T) {
emptyList := []Job{}
oneJob := []Job{{Name: "a", Timestamp: 10, Success: true}}
twoJobs := []Job{
{Name: "a", Timestamp: 10, Success: true},
{Name: "a", Timestamp: 5, Success: true},
{Name: "a", Timestamp: 10, Success: true},
}
threeJobs := []Job{
{Name: "a", Timestamp: 5, Success: true},
{Name: "a", Timestamp: 10, Success: true},
{Name: "a", Timestamp: 8, Success: false},
}
type args struct {
jobs []Job
@ -20,9 +25,10 @@ func TestKeepOldestOnly(t *testing.T) {
args args
want []Job
}{
{"empty list", args{emptyList}, emptyList},
{"empty list", args{emptyList}, nil},
{"one job", args{oneJob}, oneJob},
{"two jobs", args{twoJobs}, oneJob},
{"three jobs", args{threeJobs}, oneJob},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {