|
|
@@ -1,31 +1,16 @@ |
|
|
/* globals it, describe */
|
|
|
|
|
|
const {scoreScenarios, boilDownIndividualScore} = require('../app/fitness-scoring.js');
|
|
|
|
|
|
const scenario = require('./fixtures/scenario')();
|
|
|
const assert = require('assert');
|
|
|
|
|
|
const scenarioId = 1;
|
|
|
const scenarioId = scenario.id;
|
|
|
|
|
|
const scenarios = [scenario];
|
|
|
|
|
|
describe('scoreScenario', () => {
|
|
|
it('assigns fitness scores for individuals', () => {
|
|
|
const scenarios = [
|
|
|
{
|
|
|
id: scenarioId,
|
|
|
participants: ['Nick'],
|
|
|
|
|
|
initialPositions: {
|
|
|
Nick: {x: 0, y: 0}
|
|
|
},
|
|
|
|
|
|
expectedPositions: {
|
|
|
Nick: [
|
|
|
{
|
|
|
frame: 10,
|
|
|
x: 100,
|
|
|
y: 0
|
|
|
}
|
|
|
]
|
|
|
}
|
|
|
}
|
|
|
];
|
|
|
|
|
|
const individual = [
|
|
|
(entity, api) => api.setVelocity(entity, {x: 10, y: 0})
|
|
|
@@ -37,32 +22,11 @@ describe('scoreScenario', () => { |
|
|
|
|
|
const fitnesses = scoreScenarios(scenarios, individuals);
|
|
|
|
|
|
assert.equal(fitnesses[scenarioId].Nick.get(individual).length, 1);
|
|
|
assert.equal(typeof fitnesses[scenarioId].Nick.get(individual).length, 'number');
|
|
|
assert.equal(fitnesses.get(scenario).Nick.get(individual).length, 1);
|
|
|
assert.equal(typeof fitnesses.get(scenario).Nick.get(individual).length, 'number');
|
|
|
});
|
|
|
|
|
|
it('has a bug lol', () => {
|
|
|
const scenarios = [
|
|
|
{
|
|
|
id: scenarioId,
|
|
|
participants: ['Nick'],
|
|
|
|
|
|
initialPositions: {
|
|
|
Nick: {x: 0, y: 0}
|
|
|
},
|
|
|
|
|
|
expectedPositions: {
|
|
|
Nick: [
|
|
|
{
|
|
|
frame: 10,
|
|
|
x: 100,
|
|
|
y: 0
|
|
|
}
|
|
|
]
|
|
|
}
|
|
|
}
|
|
|
];
|
|
|
|
|
|
function makeVelocityGene (velocity) {
|
|
|
return (entity, api) => api.setVelocity(entity, velocity);
|
|
|
}
|
|
|
@@ -81,14 +45,40 @@ describe('scoreScenario', () => { |
|
|
|
|
|
const fitnesses = scoreScenarios(scenarios, individuals);
|
|
|
|
|
|
assert.equal(typeof boilDownIndividualScore(individual, 'Nick', fitnesses), 'number');
|
|
|
assert(boilDownIndividualScore(individual, 'Nick', fitnesses) != 0, 'Boiled down score was 90');
|
|
|
|
|
|
assert(
|
|
|
fitnesses[scenarioId].Nick.get(individual)[0] !==
|
|
|
fitnesses[scenarioId].Nick.get(individual2)[0],
|
|
|
`Both individuals had a fitness of ${fitnesses[scenarioId].Nick.get(individual2)[0]}`
|
|
|
fitnesses.get(scenario).Nick.get(individual)[0] !==
|
|
|
fitnesses.get(scenario).Nick.get(individual2)[0],
|
|
|
`Both individuals had a fitness of ${fitnesses.get(scenario).Nick.get(individual2)[0]}`
|
|
|
);
|
|
|
});
|
|
|
});
|
|
|
|
|
|
describe('boilDownIndividualScore', () => {
|
|
|
const individual = [];
|
|
|
|
|
|
const fitnessesForScenario = new Map();
|
|
|
fitnessesForScenario.set(individual, [500]);
|
|
|
|
|
|
const fitnesses = new Map();
|
|
|
fitnesses.set(scenario, {
|
|
|
Nick: fitnessesForScenario
|
|
|
});
|
|
|
|
|
|
const scenarioImportances = {
|
|
|
'Nick': {[scenarioId]: 2}
|
|
|
};
|
|
|
|
|
|
const fitness = boilDownIndividualScore(individual, 'Nick', fitnesses, scenarioImportances);
|
|
|
|
|
|
assert.equal(typeof fitnesses.get(scenario), 'object');
|
|
|
|
|
|
it('takes an individual and fitnesses and returns a fitness number', () => {
|
|
|
assert.equal(typeof fitness.score, 'number', 'Expected score.score to be a number');
|
|
|
assert.equal(fitness.score, 500);
|
|
|
});
|
|
|
|
|
|
it('returns a weighted fitness number as well', () => {
|
|
|
assert.equal(typeof fitness.weightedScore, 'number', 'Expected score.weightedScore to be a number');
|
|
|
assert.equal(fitness.weightedScore, 1000);
|
|
|
});
|
|
|
});
|