pws-formula
Version:
This is a formula execute the string or buffer format formula libray to get values from string or buffer.
297 lines (286 loc) • 11.7 kB
JavaScript
/**
* Project: \pws-formula
* Created Date: Thursday, May 3rd 2018, 9:01:53 pm
* Author: Thomas.Li
* E-Mail: leeyinghui@hotmail.com
* Intro: Unit test file of the str.js
* -----
* Last Modified: Tue May 29 2018
* Modified By: Thomas.Li
* -----
* Copyright (c) 2018 pareact
* ------------------------------------
* Always bet on Javascript!
*/
const { getStringValue, verifyString, getFullString } = require('../lib/str')
const expect = require('chai').expect;
describe('ax function test', function () {
let str = '~10012A0020680133B35A4300005F43CDCC6043CDCC5C4300005D4300005D43000060410000C0400000B0409AD9CC439A9947420000009AD9CC43E77D';
let f1 = 'ax(1,4)'
let f2 = 'ax(15,4)';
let f3 = 'ax(-1,2)';
let f4 = 'ax(120,2)';
let f5 = 'ax(3,20)';
let f6 = 'ax(3,5)';
it('f1 and f2 value should be [4097, 13235]', function () {
expect(getStringValue(str, [f1, f2,]).map(x => x['data'])).to.deep.equal([4097, 13235]);
});
it('f1 should get true', function () {
expect(getStringValue(str, [f1,])[0].success).to.be.true;
});
it('f3 should get false(negative)', function () {
expect(getStringValue(str, [f3,])[0].success).to.be.false;
});
it('f4 should get false(120+2>121)', function () {
expect(getStringValue(str, [f4,])[0].success).to.be.false;
});
it('f5 should get false(20>16)', function () {
expect(getStringValue(str, [f5,])[0].success).to.be.false;
});
it('f6 should get false(5 is oven)', function () {
expect(getStringValue(str, [f6,])[0].success).to.be.false;
});
});
describe('ap function test', function () {
let str = '~10012A00307600000ECD4CC14300C0C14333F3C143333313403333F33F3333F33F00PP4842F6281C3F713D0A3F14AE073F00005F4300805E4333335F4300004842E491';
let f1 = 'ap(19)';
let f2 = 'ap(27)';
let f3 = 'ap(35)';
let f4 = 'ap(67)';
let f5 = 'ap(-1)';
let f6 = 'ap(133)';
it('f1 f2 f3 value should be [386.6, 387.5, 387.9]', function () {
expect(getStringValue(str, [f1, f2, f3]).map(x => x['data'])).to.deep.equal([386.6, 387.5, 387.9]);
});
it('f1 should get true', function () {
expect(getStringValue(str, [f1,])[0].success).to.be.true;
});
it('f4 should get false(00PP4842 is not hex string)', function () {
expect(getStringValue(str, [f4,])[0].success).to.be.false;
});
it('f5 should get false(negative)', function () {
expect(getStringValue(str, [f5,])[0].success).to.be.false;
});
it('f6 should get false(133+8>135)', function () {
expect(getStringValue(str, [f6,])[0].success).to.be.false;
});
});
describe('ad function test', function () {
let str = ':F00+10.10209-463FFFFFF5100080000E30000000000017A014C04971FQ';
let f1 = 'ad(10,3)';
let f2 = 'ad(13,4)';
let f3 = 'ad(5,4)';
let f4 = 'ad(-1,4)';
let f5 = 'ad(9,52)';
let f6 = 'ad(51,4)';
let f7 = 'ad(4,4)';
let f8 = 'ad(3,24)';
it('f1 f2 f3 value should be [209, -463, 10.1]', function () {
expect(getStringValue(str, [f1, f2, f3]).map(x => x['data'])).to.deep.equal([209, -463, 10.1]);
});
it('f1 should get true', function () {
expect(getStringValue(str, [f1,])[0].success).to.be.true;
});
it('f4 should get false(negative)', function () {
expect(getStringValue(str, [f4,])[0].success).to.be.false;
});
it('f5 should get false(9+52>60)', function () {
expect(getStringValue(str, [f5,])[0].success).to.be.false;
});
it('f6 should get false(4c04 not a digital)', function () {
expect(getStringValue(str, [f6,])[0].success).to.be.false;
});
it('f7 should get false(+10. is wrong)', function () {
expect(getStringValue(str, [f7,])[0].success).to.be.false;
});
it('f8 should get false(24>max 16 string length)', function () {
expect(getStringValue(str, [f8,])[0].success).to.be.false;
});
});
describe('ac function test', function () {
let str = '01A091023131314D5330312E30342E313331302E34322E34362D3830333832333832323138323139323230303031313030303630303036303030362B303030322B303030312B303030312B302E3035302E303337373337373337343432352B303030303030303230303031303030312A2A2A2E2A2A2A2A2E2A2A2A2A2E2A2B30302E303030393030353030353039393931303003BF';
let f1 = 'ac(50,6)';
let f2 = 'ac(148,10)';
let f3 = 'ac(18,2)';
let f4 = 'ac(-1,2)';
let f5 = 'ac(0,296)';
let f6 = 'ac(0,300)';
it('f1 f2 f3 value should be [-80, 0.05, 0]', function () {
expect(getStringValue(str, [f1, f2, f3]).map(x => x['data'])).to.deep.equal([-80, 0.05, 0]);
});
it('f1 should get true', function () {
expect(getStringValue(str, [f1,])[0].success).to.be.true;
});
it('f4 should get false(negative)', function () {
expect(getStringValue(str, [f4,])[0].success).to.be.false;
});
it('f5 should get false(convert float fault)', function () {
expect(getStringValue(str, [f5,])[0].success).to.be.false;
});
it('f6 should get false(300>298)', function () {
expect(getStringValue(str, [f6,])[0].success).to.be.false;
});
});
describe('av function test', function () {
let str1 = '-32.6';
let str2 = '0006';
let str3 = '+32.6';
let str4 = '.6';
let str5 = '-3a.6';
let str6 = '+-3';
let str7 = '30.6.3';
let str8 = '6.';
let f1 = 'av()';
it('str1 value should be -32.6', function () {
expect(getStringValue(str1, [f1,])[0].data).to.equal(-32.6);
});
it('str2 value should be 6', function () {
expect(getStringValue(str2, [f1,])[0].data).to.equal(6);
});
it('str3 value should be 32.6', function () {
expect(getStringValue(str3, [f1,])[0].data).to.equal(32.6);
});
it('str1 should get true', function () {
expect(getStringValue(str1, [f1,])[0].success).to.be.true;
});
it('str4 should get false(.6)', function () {
expect(getStringValue(str4, [f1,])[0].success).to.be.false;
});
it('str5 should get false(-3a.6)', function () {
expect(getStringValue(str5, [f1,])[0].success).to.be.false;
});
it('str6 should get false(+-3)', function () {
expect(getStringValue(str6, [f1,])[0].success).to.be.false;
});
it('str7 should get false(30.6.3)', function () {
expect(getStringValue(str7, [f1,])[0].success).to.be.false;
});
it('str8 should get false(6.)', function () {
expect(getStringValue(str8, [f1,])[0].success).to.be.false;
});
});
describe('ab function test', function () {
let str = ':F0061A0102090463FFFFFF5100080000E30000000000017A014C04971FQ';
let f1 = 'ab(33,4)';
let f2 = 'ab(33,5)';
let f3 = 'ab(1,3)';
let f4 = 'ab(59,3)';
let f5 = 'ab(33,-1)';
let f6 = 'ab(33,9)';
let f7 = 'ab(58,3)';
it('f1 f2 f3 value should be [0, 1, 0]', function () {
expect(getStringValue(str, [f1, f2, f3]).map(x => x['data'])).to.deep.equal([0, 1, 0]);
});
it('f1 should get true', function () {
expect(getStringValue(str, [f1,])[0].success).to.be.true;
});
it('f4 should get false(59+3>60)', function () {
expect(getStringValue(str, [f4,])[0].success).to.be.false;
});
it('f5 should get false(negativ)', function () {
expect(getStringValue(str, [f5,])[0].success).to.be.false;
});
it('f6 should get false(9>7)', function () {
expect(getStringValue(str, [f6,])[0].success).to.be.false;
});
it('f7 should get false(Q is not hex)', function () {
expect(getStringValue(str, [f7,])[0].success).to.be.false;
});
});
describe('verifyString function test', function () {
let str1 = '01A07CFF02E2';
let str2 = ':F0061A0102090463FFFFFF5100080000E30000000000017A014C04971F';
let str3 = '~10012AE7C0040100FCB7';
let str4 = '01';
let str5 = ':P0061A0102090463FFFFFF5100080000E30000000000017A014C04971F';
it('veirify str1 get true by lrc', function () {
expect(verifyString(str1, 2).success).to.be.true;
});
it('veirify str2 get true by sum', function () {
expect(verifyString(str2, 3).success).to.be.true;
});
it('veirify str3 get true by pmbus', function () {
expect(verifyString(str3, 4).success).to.be.true;
});
it('veirify str4 get false (length<3)', function () {
expect(verifyString(str4, 3).success).to.be.false;
});
it('veirify str5 get false (P is not a hex char)', function () {
expect(verifyString(str5, 3).success).to.be.false;
});
it('veirify str3 get false (length=21%2=1)', function () {
expect(verifyString(str3, 3).success).to.be.false;
});
it('veirify str1 get false by sum', function () {
expect(verifyString(str1, 3).success).to.be.false;
});
it('veirify str2 get false by pmbus', function () {
expect(verifyString(str2, 4).success).to.be.false;
});
it('veirify str3 get false by lrc', function () {
expect(verifyString(str3, 2).success).to.be.false;
});
it('veirify str3 get false by wrong sort', function () {
expect(verifyString(str3, 1).success).to.be.false;
});
});
describe('getFullString function test', function () {
let str1 = '01A07CFF02';
let str1_full = '01A07CFF02E2';
let str2 = ':F0061A0102090463FFFFFF5100080000E30000000000017A014C0497';
let str2_full = ':F0061A0102090463FFFFFF5100080000E30000000000017A014C04971F';
let str3 = '~10012AE7C0040100';
let str3_full = '~10012AE7C0040100FCB7';
let str4 = '01';
let str5 = ':P0061A0102090463FFFFFF5100080000E30000000000017A014C0497';
it('str1 get full string by lrc', function () {
expect(getFullString(str1, 2).data).to.deep.equal(str1_full);
});
it('str2 get full string by sum', function () {
expect(getFullString(str2.slice(1), 3).data).to.deep.equal(str2_full.slice(1));
});
it('str3 get full string by pmbus', function () {
expect(getFullString(str3.slice(1), 4).data).to.deep.equal(str3_full.slice(1));
});
it('str1 cannot get full string by sum', function () {
expect(getFullString(str1, 3).data).to.not.deep.equal(str1_full);
});
it('str2 cannot get full string by pmbus', function () {
expect(getFullString(str2.slice(1), 4).data).to.not.deep.equal(str2_full.slice(1));
});
it('str3 cannot get full string by lrc', function () {
expect(getFullString(str3.slice(1), 2).data).to.not.deep.equal(str3_full.slice(1));
});
it('str4 cannot get full string (length<3)', function () {
expect(getFullString(str4, 3).success).to.be.false;
});
it('str5 cannot get full string (P is not a hex char)', function () {
expect(getFullString(str5.slice(1), 3).success).to.be.false;
});
it('str1 cannot get full string (wrong sort)', function () {
expect(getFullString(str1, 1).success).to.be.false;
});
});
describe('pif function test', function () {
let str1 = ':F0061A0102090463FFFFFF5100080000E30000000000017A014C0497';
let str2 = '~10012A0020680133B35A4300005F43CDCC6043CDCC5C4300005D4300005D4332322E330000604100-32.600C0400000B0409AD9CC439A9947420000009AD9CC43E77D';
let f1 = 'pif(ab(0,3)==0, ax(8,4), ad(8,4))';
let f2 = 'pif(ab(0,5)==0, ax(8,4), ad(8,4))';
let f3 = 'pif(ap(14)>200, ac(62,8), ad(80,5))';
let f4 = 'pif(ap(14)<200, ac(62,8), ad(80,5))';
it('f1 get 521', function () {
expect(getStringValue(str1.slice(1), [f1,])[0].data).to.equal(521);
});
it('f2 get 209', function () {
expect(getStringValue(str1.slice(1), [f2,])[0].data).to.equal(209);
});
it('f1 should get true', function () {
expect(getStringValue(str1.slice(1), [f1,])[0].success).to.be.true;
});
it('f3 get 22.3', function () {
expect(getStringValue(str2.slice(1), [f3,])[0].data).to.equal(22.3);
});
it('f4 get -32.6', function () {
expect(getStringValue(str2.slice(1), [f4,])[0].data).to.equal(-32.6);
});
});