Browse Source

Switch to res.data instead of req.results.data

pull/274/head
Diana Shkolnikov 9 years ago
parent
commit
f63533dd9c
  1. 58
      middleware/confidenceScoreReverse.js
  2. 160
      test/unit/middleware/confidenceScoreReverse.js

58
middleware/confidenceScoreReverse.js

@ -3,19 +3,23 @@ var _ = require('lodash');
// these are subjective terms, but wanted to add shortcuts to denote something // these are subjective terms, but wanted to add shortcuts to denote something
// about importance // about importance
var EXACT = 1.0; var SCORES = {
var EXCELLENT = 0.9; EXACT: 1.0,
var GOOD = 0.8; EXCELLENT: 0.9,
var OKAY = 0.7; GOOD: 0.8,
var POOR = 0.6; OKAY: 0.7,
var NONE = 0.5; POOR: 0.6,
var INVALID = 0.0; NONE: 0.5,
INVALID: 0.0
};
var _1_METER = 1; var BUCKETS = {
var _10_METERS = 10; _1_METER: 1,
var _100_METERS = 100; _10_METERS: 10,
var _250_METERS = 250; _100_METERS: 100,
var _1_KILOMETER = 1000; _250_METERS: 250,
_1_KILOMETER: 1000
};
function setup() { function setup() {
return computeScores; return computeScores;
@ -23,38 +27,38 @@ function setup() {
function computeScores(req, res, next) { function computeScores(req, res, next) {
// do nothing if no result data set // do nothing if no result data set
if (!req.results || !req.results.data) { if (!res.data || !res.data) {
return next(); return next();
} }
// loop through data items and determine confidence scores // loop through data items and determine confidence scores
req.results.data = req.results.data.map(computeConfidenceScore.bind(null, req)); res.data = res.data.map(computeConfidenceScore);
next(); next();
} }
function computeConfidenceScore(req, hit) { function computeConfidenceScore(hit) {
// non-number or invalid distance should be given confidence 0.0 // non-number or invalid distance should be given confidence 0.0
if (!_.isFinite(hit.distance) || hit.distance < 0) { if (!_.isFinite(hit.distance) || hit.distance < 0) {
hit.confidence = INVALID; hit.confidence = SCORES.INVALID;
return hit; return hit;
} }
var distance = hit.distance * 1000.0; var distance = hit.distance * 1000.0;
// figure out which range the distance lies in and assign confidence accordingly // figure out which range the distance lies in and assign confidence accordingly
if (distance < _1_METER) { if (distance < BUCKETS._1_METER) {
hit.confidence = EXACT; hit.confidence = SCORES.EXACT;
} else if (distance < _10_METERS) { } else if (distance < BUCKETS._10_METERS) {
hit.confidence = EXCELLENT; hit.confidence = SCORES.EXCELLENT;
} else if (distance < _100_METERS) { } else if (distance < BUCKETS._100_METERS) {
hit.confidence = GOOD; hit.confidence = SCORES.GOOD;
} else if (distance < _250_METERS) { } else if (distance < BUCKETS._250_METERS) {
hit.confidence = OKAY; hit.confidence = SCORES.OKAY;
} else if (distance < _1_KILOMETER) { } else if (distance < BUCKETS._1_KILOMETER) {
hit.confidence = POOR; hit.confidence = SCORES.POOR;
} else { } else {
hit.confidence = NONE; hit.confidence = SCORES.NONE;
} }
return hit; return hit;

160
test/unit/middleware/confidenceScoreReverse.js

@ -3,11 +3,11 @@ var confidenceScoreReverse = require('../../../middleware/confidenceScoreReverse
module.exports.tests = {}; module.exports.tests = {};
module.exports.tests.confidenceScoreReverse = function(test, common) { module.exports.tests.confidenceScoreReverse = function(test, common) {
test('req without results should not throw exception', function(t) { test('res without results should not throw exception', function(t) {
var req = {}; var res = {};
try { try {
confidenceScoreReverse(req, null, function() {}); confidenceScoreReverse(null, res, function() {});
} }
catch (e) { catch (e) {
t.fail('an exception should not have been thrown'); t.fail('an exception should not have been thrown');
@ -18,13 +18,13 @@ module.exports.tests.confidenceScoreReverse = function(test, common) {
}); });
test('req.results without data should not throw exception', function(t) { test('res.results without data should not throw exception', function(t) {
var req = { var res = {
results: {} results: {}
}; };
try { try {
confidenceScoreReverse(req, null, function() {}); confidenceScoreReverse(null, res, function() {});
} }
catch (e) { catch (e) {
t.fail('an exception should not have been thrown'); t.fail('an exception should not have been thrown');
@ -36,146 +36,130 @@ module.exports.tests.confidenceScoreReverse = function(test, common) {
}); });
test('0m <= distance < 1m should be given score 1.0', function(t) { test('0m <= distance < 1m should be given score 1.0', function(t) {
var req = { var res = {
results: { data: [
data: [ { distance: 0.0000 / 1000.0 },
{ distance: 0.0000 / 1000.0 }, { distance: 0.9999 / 1000.0 }
{ distance: 0.9999 / 1000.0 } ]
]
}
}; };
confidenceScoreReverse(req, null, function() { confidenceScoreReverse(null, res, function() {
t.equal(req.results.data[0].confidence, 1.0, 'score should be exact confidence'); t.equal(res.data[0].confidence, 1.0, 'score should be exact confidence');
t.equal(req.results.data[1].confidence, 1.0, 'score should be exact confidence'); t.equal(res.data[1].confidence, 1.0, 'score should be exact confidence');
t.end(); t.end();
}); });
}); });
test('1m <= distance < 10m should be given score 0.9', function(t) { test('1m <= distance < 10m should be given score 0.9', function(t) {
var req = { var res = {
results: { data: [
data: [ { distance: 1.0000 / 1000.0 },
{ distance: 1.0000 / 1000.0 }, { distance: 9.9999 / 1000.0 }
{ distance: 9.9999 / 1000.0 } ]
]
}
}; };
confidenceScoreReverse(req, null, function() { confidenceScoreReverse(null, res, function() {
t.equal(req.results.data[0].confidence, 0.9, 'score should be excellent confidence'); t.equal(res.data[0].confidence, 0.9, 'score should be excellent confidence');
t.equal(req.results.data[1].confidence, 0.9, 'score should be excellent confidence'); t.equal(res.data[1].confidence, 0.9, 'score should be excellent confidence');
t.end(); t.end();
}); });
}); });
test('10m <= distance < 100m should be given score 0.8', function(t) { test('10m <= distance < 100m should be given score 0.8', function(t) {
var req = { var res = {
results: { data: [
data: [ { distance: 10.0000 / 1000.0 },
{ distance: 10.0000 / 1000.0 }, { distance: 99.9999 / 1000.0 }
{ distance: 99.9999 / 1000.0 } ]
]
}
}; };
confidenceScoreReverse(req, null, function() { confidenceScoreReverse(null, res, function() {
t.equal(req.results.data[0].confidence, 0.8, 'score should be good confidence'); t.equal(res.data[0].confidence, 0.8, 'score should be good confidence');
t.equal(req.results.data[1].confidence, 0.8, 'score should be good confidence'); t.equal(res.data[1].confidence, 0.8, 'score should be good confidence');
t.end(); t.end();
}); });
}); });
test('100m <= distance < 250m should be given score 0.7', function(t) { test('100m <= distance < 250m should be given score 0.7', function(t) {
var req = { var res = {
results: { data: [
data: [ { distance: 100.0000 / 1000.0 },
{ distance: 100.0000 / 1000.0 }, { distance: 249.9999 / 1000.0 }
{ distance: 249.9999 / 1000.0 } ]
]
}
}; };
confidenceScoreReverse(req, null, function() { confidenceScoreReverse(null, res, function() {
t.equal(req.results.data[0].confidence, 0.7, 'score should be okay confidence'); t.equal(res.data[0].confidence, 0.7, 'score should be okay confidence');
t.equal(req.results.data[1].confidence, 0.7, 'score should be okay confidence'); t.equal(res.data[1].confidence, 0.7, 'score should be okay confidence');
t.end(); t.end();
}); });
}); });
test('250m <= distance < 1000m should be given score 0.6', function(t) { test('250m <= distance < 1000m should be given score 0.6', function(t) {
var req = { var res = {
results: { data: [
data: [ {distance: 250.0000 / 1000.0},
{ distance: 250.0000 / 1000.0 }, {distance: 999.9999 / 1000.0}
{ distance: 999.9999 / 1000.0 } ]
]
}
}; };
confidenceScoreReverse(req, null, function() { confidenceScoreReverse(null, res, function() {
t.equal(req.results.data[0].confidence, 0.6, 'score should be poor confidence'); t.equal(res.data[0].confidence, 0.6, 'score should be poor confidence');
t.equal(req.results.data[1].confidence, 0.6, 'score should be poor confidence'); t.equal(res.data[1].confidence, 0.6, 'score should be poor confidence');
t.end(); t.end();
}); });
}); });
test('distance >= 1000m should be given score 0.5', function(t) { test('distance >= 1000m should be given score 0.5', function(t) {
var req = { var res = {
results: { data: [
data: [ {distance: 1000.0 / 1000.0},
{ distance: 1000.0 / 1000.0 }, {distance: 2000.0 / 1000.0}
{ distance: 2000.0 / 1000.0 } ]
]
}
}; };
confidenceScoreReverse(req, null, function() { confidenceScoreReverse(null, res, function() {
t.equal(req.results.data[0].confidence, 0.5, 'score should be least confidence'); t.equal(res.data[0].confidence, 0.5, 'score should be least confidence');
t.equal(req.results.data[1].confidence, 0.5, 'score should be least confidence'); t.equal(res.data[1].confidence, 0.5, 'score should be least confidence');
t.end(); t.end();
}); });
}); });
test('distance < 0 (invalid) should be given score 0.0', function(t) { test('distance < 0 (invalid) should be given score 0.0', function(t) {
var req = { var res = {
results: { data: [
data: [ { distance: -1.0000 / 1000.0 }
{ distance: -1.0000 / 1000.0 } ]
]
}
}; };
confidenceScoreReverse(req, null, function() { confidenceScoreReverse(null, res, function() {
t.equal(req.results.data[0].confidence, 0.0, 'score should be 0.0 confidence'); t.equal(res.data[0].confidence, 0.0, 'score should be 0.0 confidence');
t.end(); t.end();
}); });
}); });
test('non-number-type (invalid) distance should be given score 0.0', function(t) { test('non-number-type (invalid) distance should be given score 0.0', function(t) {
var req = { var res = {
results: { data: [
data: [ {},
{}, {distance: []},
{ distance: [] }, {distance: {}},
{ distance: {} }, {distance: 'this is not a number'}
{ distance: 'this is not a number' } ]
]
}
}; };
confidenceScoreReverse(req, null, function() { confidenceScoreReverse(null, res, function() {
t.equal(req.results.data[0].confidence, 0.0, 'score should be 0.0 confidence'); t.equal(res.data[0].confidence, 0.0, 'score should be 0.0 confidence');
t.equal(req.results.data[1].confidence, 0.0, 'score should be 0.0 confidence'); t.equal(res.data[1].confidence, 0.0, 'score should be 0.0 confidence');
t.equal(req.results.data[2].confidence, 0.0, 'score should be 0.0 confidence'); t.equal(res.data[2].confidence, 0.0, 'score should be 0.0 confidence');
t.equal(req.results.data[3].confidence, 0.0, 'score should be 0.0 confidence'); t.equal(res.data[3].confidence, 0.0, 'score should be 0.0 confidence');
t.end(); t.end();
}); });

Loading…
Cancel
Save