UNPKG

simplehtm

Version:
201 lines (188 loc) 8.7 kB
const assert = require('chai').assert const expect = require('chai').expect const CyclicEncoder = require('../../../src/encoders/cyclicScalar') const DayOfWeekCategoryEncoder = require('../../../src/encoders/dayOfWeekCategory') describe('cyclic encoders', () => { describe('resolution 1', () => { describe('n 2', () => { it('encodes 1 value per bit', () => { let encoder = new CyclicEncoder({ resolution: 1, n: 2, w: 1, }) expect(encoder.encode(0)).to.deep.equal([1,0]) expect(encoder.encode(1)).to.deep.equal([0,1]) }) }) describe('n 4', () => { it('encodes 1 value per bit', () => { let encoder = new CyclicEncoder({ resolution: 1, n: 5, w: 1, }) expect(encoder.encode(0)).to.deep.equal([1,0,0,0,0]) expect(encoder.encode(1)).to.deep.equal([0,1,0,0,0]) expect(encoder.encode(2)).to.deep.equal([0,0,1,0,0]) expect(encoder.encode(3)).to.deep.equal([0,0,0,1,0]) expect(encoder.encode(4)).to.deep.equal([0,0,0,0,1]) }) }) }) describe('resolution 5', () => { it('encodes 5 values per bit', () => { let encoder = new CyclicEncoder({ resolution: 5, n: 2, w: 1, }) expect(encoder.encode(0)).to.deep.equal([1,0]) expect(encoder.encode(1)).to.deep.equal([1,0]) expect(encoder.encode(2)).to.deep.equal([1,0]) expect(encoder.encode(3)).to.deep.equal([1,0]) expect(encoder.encode(4)).to.deep.equal([1,0]) expect(encoder.encode(5)).to.deep.equal([0,1]) expect(encoder.encode(6)).to.deep.equal([0,1]) expect(encoder.encode(7)).to.deep.equal([0,1]) expect(encoder.encode(8)).to.deep.equal([0,1]) expect(encoder.encode(9)).to.deep.equal([0,1]) }) }) describe('when creating', () => { it('translates _min/_max into the right input domain', () => { let encoder = new CyclicEncoder({ min: 0, max: 90, w: 1, n: 10, }) expect(encoder.encode(0)).to.deep.equal([1,0,0,0,0,0,0,0,0,0]) expect(encoder.encode(10)).to.deep.equal([0,1,0,0,0,0,0,0,0,0]) expect(encoder.encode(20)).to.deep.equal([0,0,1,0,0,0,0,0,0,0]) expect(encoder.encode(30)).to.deep.equal([0,0,0,1,0,0,0,0,0,0]) expect(encoder.encode(40)).to.deep.equal([0,0,0,0,1,0,0,0,0,0]) expect(encoder.encode(50)).to.deep.equal([0,0,0,0,0,1,0,0,0,0]) expect(encoder.encode(60)).to.deep.equal([0,0,0,0,0,0,1,0,0,0]) expect(encoder.encode(70)).to.deep.equal([0,0,0,0,0,0,0,1,0,0]) expect(encoder.encode(80)).to.deep.equal([0,0,0,0,0,0,0,0,1,0]) expect(encoder.encode(90)).to.deep.equal([0,0,0,0,0,0,0,0,0,1]) }) it('translates resolution into the right input domain', () => { let encoder = new CyclicEncoder({ resolution: 9, w: 1, n: 10, }) expect(encoder.encode(0)).to.deep.equal([1,0,0,0,0,0,0,0,0,0]) expect(encoder.encode(10)).to.deep.equal([0,1,0,0,0,0,0,0,0,0]) expect(encoder.encode(20)).to.deep.equal([0,0,1,0,0,0,0,0,0,0]) expect(encoder.encode(30)).to.deep.equal([0,0,0,1,0,0,0,0,0,0]) expect(encoder.encode(40)).to.deep.equal([0,0,0,0,1,0,0,0,0,0]) expect(encoder.encode(50)).to.deep.equal([0,0,0,0,0,1,0,0,0,0]) expect(encoder.encode(60)).to.deep.equal([0,0,0,0,0,0,1,0,0,0]) expect(encoder.encode(70)).to.deep.equal([0,0,0,0,0,0,0,1,0,0]) expect(encoder.encode(80)).to.deep.equal([0,0,0,0,0,0,0,0,1,0]) expect(encoder.encode(90)).to.deep.equal([0,0,0,0,0,0,0,0,0,1]) }) describe('has w output bits on', () => { it('when created with min/max', () => { let encoder = new CyclicEncoder({ min: 0, max: 9, w: 3, n: 10, }) expect(encoder.encode(0)).to.deep.equal([1,1,1,0,0,0,0,0,0,0]) expect(encoder.encode(1)).to.deep.equal([0,1,1,1,0,0,0,0,0,0]) expect(encoder.encode(2)).to.deep.equal([0,0,1,1,1,0,0,0,0,0]) expect(encoder.encode(3)).to.deep.equal([0,0,0,1,1,1,0,0,0,0]) expect(encoder.encode(4)).to.deep.equal([0,0,0,0,1,1,1,0,0,0]) expect(encoder.encode(5)).to.deep.equal([0,0,0,0,0,1,1,1,0,0]) expect(encoder.encode(6)).to.deep.equal([0,0,0,0,0,0,1,1,1,0]) expect(encoder.encode(7)).to.deep.equal([0,0,0,0,0,0,0,1,1,1]) expect(encoder.encode(8)).to.deep.equal([1,0,0,0,0,0,0,0,1,1]) expect(encoder.encode(9)).to.deep.equal([1,1,0,0,0,0,0,0,0,1]) }) }) }) // describe('when 7 values 7 buckets and range 1', () => { // let values = 7, // buckets = 7, // range = 1, // encoder = new CyclicEncoder({ // values: values, // buckets: buckets, // range: range, // }) // it('has the correct resolution', () => { // expect(encoder.resolution).to.equal(1) // }) // }) // // describe('when 7 values 21 buckets and range 3', () => { // let values = 7, // buckets = 21, // range = 3, // encoder = new CyclicEncoder({ // values: values, // buckets: buckets, // range: range, // }) // it('has the correct resolution', () => { // expect(encoder.resolution).to.equal(1) // }) // }) describe('when encoding days of week', () => { it('encodes a unique bit range per day with 1 bit range', () => { let encoder = new DayOfWeekCategoryEncoder({ w: 1, }) let Sunday = encoder.encode(encoder.daysOfWeek[0]) let Monday = encoder.encode(encoder.daysOfWeek[1]) let Tuesday = encoder.encode(encoder.daysOfWeek[2]) let Wednesday = encoder.encode(encoder.daysOfWeek[3]) let Thursday = encoder.encode(encoder.daysOfWeek[4]) let Friday = encoder.encode(encoder.daysOfWeek[5]) let Saturday = encoder.encode(encoder.daysOfWeek[6]) expect(Sunday).to.deep .equal([1,0,0,0,0,0,0]) expect(Monday).to.deep .equal([0,1,0,0,0,0,0]) expect(Tuesday).to.deep .equal([0,0,1,0,0,0,0]) expect(Wednesday).to.deep .equal([0,0,0,1,0,0,0]) expect(Thursday).to.deep .equal([0,0,0,0,1,0,0]) expect(Friday).to.deep .equal([0,0,0,0,0,1,0]) expect(Saturday).to.deep .equal([0,0,0,0,0,0,1]) }) it('encodes a unique bit range per day with many bit range', () => { let encoder = new DayOfWeekCategoryEncoder({ w: 3, }) let Sunday = encoder.encode(encoder.daysOfWeek[0]) let Monday = encoder.encode(encoder.daysOfWeek[1]) let Tuesday = encoder.encode(encoder.daysOfWeek[2]) let Wednesday = encoder.encode(encoder.daysOfWeek[3]) let Thursday = encoder.encode(encoder.daysOfWeek[4]) let Friday = encoder.encode(encoder.daysOfWeek[5]) let Saturday = encoder.encode(encoder.daysOfWeek[6]) expect(Sunday).to.deep .equal([1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]) expect(Monday).to.deep .equal([0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]) expect(Tuesday).to.deep .equal([0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0]) expect(Wednesday).to.deep .equal([0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0]) expect(Thursday).to.deep .equal([0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0]) expect(Friday).to.deep .equal([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0]) expect(Saturday).to.deep .equal([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1]) }) }) })