You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
157 lines
3.6 KiB
157 lines
3.6 KiB
import { initChart } from './c3-helper' |
|
import { getRegionArea, compareEpochs, pointInRegion } from '../src/stanford' |
|
|
|
describe('c3 stanford tests', function() { |
|
'use strict' |
|
|
|
var chart, args |
|
|
|
beforeEach(function(done) { |
|
chart = initChart(chart, args, done) |
|
}) |
|
|
|
describe('count epochs in region', function() { |
|
beforeAll(function() { |
|
args = { |
|
data: { |
|
x: 'x', |
|
y: 'y', |
|
epochs: 'epochs', |
|
columns: [ |
|
['x', 25, 35], |
|
['y', 25, 33], |
|
['epochs', 30, 35] |
|
], |
|
type: 'stanford' |
|
} |
|
} |
|
}) |
|
|
|
it('should return 0 if the region has no epochs', function() { |
|
var region = [ |
|
{ x: 0, y: 0 }, |
|
{ x: 20, y: 0 }, |
|
{ x: 20, y: 20 }, |
|
{ x: 0, y: 20 } |
|
] |
|
|
|
var result = chart.internal.countEpochsInRegion(region) |
|
|
|
expect(result.percentage).toBe(0) |
|
expect(result.value).toBe(0) |
|
}) |
|
|
|
it('should return 100% if the region has all the epochs', function() { |
|
var region = [ |
|
{ x: 0, y: 0 }, |
|
{ x: 60, y: 0 }, |
|
{ x: 60, y: 60 }, |
|
{ x: 0, y: 60 } |
|
] |
|
|
|
var result = chart.internal.countEpochsInRegion(region) |
|
|
|
expect(Number(result.percentage)).toBe(100) |
|
expect(result.value).toBe(65) |
|
}) |
|
}) |
|
|
|
describe('get centroid of region', function() { |
|
beforeAll(function() { |
|
args = { |
|
data: { |
|
x: 'x', |
|
y: 'y', |
|
epochs: 'epochs', |
|
columns: [ |
|
['x', 25, 35], |
|
['y', 25, 33], |
|
['epochs', 30, 35] |
|
], |
|
type: 'stanford' |
|
} |
|
} |
|
}) |
|
|
|
var region = [ |
|
// a 20 x 20 square |
|
{ x: 0, y: 0 }, |
|
{ x: 20, y: 0 }, |
|
{ x: 20, y: 20 }, |
|
{ x: 0, y: 20 } |
|
] |
|
|
|
it('should return the centroid of a polygon', function() { |
|
var result = chart.internal.getCentroid(region) |
|
|
|
expect(result.x).toBe(10) |
|
expect(result.y).toBe(10) |
|
}) |
|
}) |
|
|
|
describe('get region area', function() { |
|
var square = [ |
|
// a 20 x 20 square |
|
{ x: 0, y: 0 }, |
|
{ x: 20, y: 0 }, |
|
{ x: 20, y: 20 }, |
|
{ x: 0, y: 20 } |
|
] |
|
|
|
var squareArea = 400 |
|
|
|
var triangle = [ |
|
// A = b * h / 2 |
|
{ x: 0, y: 0 }, |
|
{ x: 20, y: 20 }, |
|
{ x: 0, y: 20 } |
|
] |
|
|
|
var triangleArea = 200 |
|
|
|
it('should return the correct area for a square', function() { |
|
expect(Math.abs(getRegionArea(square))).toBe(squareArea) |
|
}) |
|
|
|
it('should return the correct area for a triangle', function() { |
|
expect(Math.abs(getRegionArea(triangle))).toBe(triangleArea) |
|
}) |
|
}) |
|
|
|
describe('compare epochs', function() { |
|
var dataBigger = { epochs: 2 } |
|
var dataLower = { epochs: 1 } |
|
|
|
it('should return -1 if epochs are lower', function() { |
|
expect(compareEpochs(dataLower, dataBigger)).toBe(-1) |
|
}) |
|
|
|
it('should return 1 if epochs are bigger', function() { |
|
expect(compareEpochs(dataBigger, dataLower)).toBe(1) |
|
}) |
|
|
|
it('should return 0 if epochs are equal', function() { |
|
expect(compareEpochs(dataLower, dataLower)).toBe(0) |
|
}) |
|
}) |
|
|
|
describe('check if point is in region', function() { |
|
var region = [ |
|
{ x: 0, y: 0 }, |
|
{ x: 20, y: 0 }, |
|
{ x: 20, y: 20 }, |
|
{ x: 20, y: 20 } |
|
] |
|
|
|
var pointInside = { x: 0, value: 0 } |
|
var pointOutInside = { x: 21, value: 0 } |
|
|
|
it('should return true if point is inside region', function() { |
|
expect(pointInRegion(pointInside, region)).toBeTruthy() |
|
}) |
|
|
|
it('should return false if point is outside region', function() { |
|
expect(pointInRegion(pointOutInside, region)).toBeFalsy() |
|
}) |
|
}) |
|
})
|
|
|