View
@@ -0,0 +1,33 @@
/* globals it, describe */
const calculateScenarioImportances = require('../app/calculate-scenario-importance.js');
const scenario = require('./fixtures/scenario')();
const scenarioId = scenario.id;
const assert = require('assert');
describe('createScenarioImportances', () => {
it('returns a object [scenario][participant] with a multiplier for how important it is to value diveristy in that scenario', () => {
const individual = [];
const fitnessesForScenario = new Map();
fitnessesForScenario.set(individual, [500]);
const fitnesses = new Map();
fitnesses.set(scenario, {
Nick: fitnessesForScenario
});
const scenarioImportances = calculateScenarioImportances(['Nick'], fitnesses);
assert.deepEqual(scenarioImportances, {
Nick: {
1: 2
}
});
});
});
View
@@ -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);
});
});
View
No changes.
View
@@ -0,0 +1,22 @@
function createScenario() {
return {
id: 1,
participants: ['Nick'],
initialPositions: {
Nick: {x: 0, y: 0}
},
expectedPositions: {
Nick: [
{
frame: 10,
x: 100,
y: 0
}
]
}
}
}
module.exports = createScenario;
View
@@ -88,11 +88,11 @@ describe('Helix', () => {
var results = run(fitnessScenarios, 20);
it('returns an array of entities with fitnesses', () => {
assert(!isNaN(results['swordsunit'][0].fitness));
assert(!isNaN(results['swordsunit'][0].fitness.score));
});
it('actually has different values for the results', () => {
var fitnesses = results['swordsunit'].map(result => result.fitness);
var fitnesses = results['swordsunit'].map(result => result.fitness.score);
assert(
_.uniq(fitnesses).length > 1,
`All results had the same fitness: ${fitnesses[0]}`
@@ -103,8 +103,8 @@ describe('Helix', () => {
let inputResults = results;
assert(
inputResults['swordsunit'][0].fitness > 900,
`Handle controls better: ${inputResults['swordsunit'][0].fitness}/900`
inputResults['swordsunit'][0].fitness.score > 900,
`Handle controls better: ${inputResults['swordsunit'][0].fitness.score}/900`
)
});
});