This repository has been archived on 2024-04-10. You can view files and clone it, but you cannot make any changes to it's state, such as pushing and creating new issues, pull requests or comments.
elektron/def/taskUtils_test.go
PRADYUMNA KAUSHIK e3caa90c31
Refactor imports, Add vendor/ as submodule (#5)
refact imports to github.xxx. update go.mod + go.sum

* removed vendor/ folder

* Added vendor/ submodule.

Moved dependencies that need to be vendored into separate repository.
	- https://github.com/spdfg/elektron-vendor
Added vendor/ as a submodule using the below command.
	- git submodule add https://github.com/spdfg/elektron-vendor vendor
If wanting to use vendor, run the following commands after cloning
elektron.
1. git submodule init
2. git submodule update

* added instructions to clone vendor/ submodule.

* updated module to spdfg. Refactored imports
2019-10-31 14:32:46 -04:00

136 lines
3.6 KiB
Go

// Copyright (C) 2018 spdfg
//
// This file is part of Elektron.
//
// Elektron is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Elektron is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Elektron. If not, see <http://www.gnu.org/licenses/>.
//
package def
import (
"github.com/stretchr/testify/assert"
"testing"
)
var instances = 1
var tasks = []Task{
{
Name: "task1",
CPU: 4.0,
RAM: 1024,
Watts: 50.0,
TaskID: "electron-task1-1",
Instances: &instances,
},
{
Name: "task2",
CPU: 3.0,
RAM: 128,
Watts: 55.0,
TaskID: "electron-task2-1",
Instances: &instances,
},
{
Name: "task3",
CPU: 2.0,
RAM: 64,
Watts: 75.0,
TaskID: "electron-task3-1",
Instances: &instances,
},
{
Name: "task4",
CPU: 1.0,
RAM: 3072,
Watts: 81.0,
TaskID: "electron-task4-1",
Instances: &instances,
},
}
// Test task classification based on Watts requirement.
func TestClassifyTasks(t *testing.T) {
// Classifying tasks into two clusters.
taskClusters := ClassifyTasks(tasks, 2)
assert.True(t, len(taskClusters) == 2, "failed to classify tasks into 2 clusters")
// Test whether the clusters are ordered.
firstCluster := taskClusters[0]
secondCluster := taskClusters[1]
assert.Less(t, firstCluster.SizeScore, secondCluster.SizeScore, "failed to order task clusters")
// Tasks in the first cluster should be less power-intensive when compared to the tasks in the second cluster.
for _, taskFirstCluster := range firstCluster.Tasks {
for _, taskSecondCluster := range secondCluster.Tasks {
assert.LessOrEqual(t, taskFirstCluster.Watts,
taskSecondCluster.Watts, "failed to correctly classify tasks")
}
}
}
func TestSortTasks(t *testing.T) {
testSortedOrder := func(sortingCriteria string, sortedValues []float64, value func(i int) float64) {
assert.Equal(t, len(sortedValues), len(tasks))
for i := 0; i < len(tasks); i++ {
assert.Equal(t, sortedValues[i], value(i), "failed to sort tasks by "+sortingCriteria)
}
}
// Sorting by CPU.
SortTasks(tasks, SortByCPU)
testSortedOrder(
"CPU",
[]float64{1.0, 2.0, 3.0, 4.0},
func(i int) float64 {
return tasks[i].CPU
})
// Sorting by RAM.
SortTasks(tasks, SortByRAM)
testSortedOrder(
"RAM",
[]float64{64, 128, 1024, 3072},
func(i int) float64 {
return tasks[i].RAM
})
// Sorting by Watts.
SortTasks(tasks, SortByWatts)
testSortedOrder(
"Watts",
[]float64{50.0, 55.0, 75.0, 81.0},
func(i int) float64 {
return tasks[i].Watts
})
}
func TestGetResourceRequirement(t *testing.T) {
initTaskResourceRequirements(tasks)
for _, task := range tasks {
resources, err := GetResourceRequirement(task.TaskID)
assert.NoError(t, err)
assert.Equal(t, resources.CPU, task.CPU)
assert.Equal(t, resources.Ram, task.RAM)
assert.Equal(t, resources.Watts, task.Watts)
}
}
func TestGetTaskDistributionInWindow(t *testing.T) {
// Using a window of size 4.
taskDistribution, err := GetTaskDistributionInWindow(4, tasks)
assert.NoError(t, err)
// The tasks above are evenly distributed hence, task distribution should be 1.0.
assert.Equal(t, taskDistribution, 1.0, "task distribution determined is incorrect")
}