// Copyright 2019 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

package testsharder

import "go.fuchsia.dev/fuchsia/tools/build"

// Exactly one entry in the durations file will have this as its test_name field. The
// durations specified by this entry will be applied to any tests that aren't
// found in the durations file (e.g. because they have recently been added or
// renamed).
var defaultDurationKey = "*"

// TestDurationsMap maps test names to corresponding test duration data.
type TestDurationsMap map[string]build.TestDuration

func NewTestDurationsMap(durations []build.TestDuration) TestDurationsMap {
	durationsMap := TestDurationsMap{}
	for _, d := range durations {
		durationsMap[d.Name] = d
	}
	return durationsMap
}

// Get returns the duration data for a given test. If the test is not included
// in the durations map, the default duration data is returned instead.
func (m TestDurationsMap) Get(test Test) build.TestDuration {
	if testData, ok := m[test.Test.Name]; ok {
		return testData
	}
	return m[defaultDurationKey]
}
