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.

158 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()
})
})
})