jspurefix
Version:
pure node js fix engine
104 lines • 4.63 kB
JavaScript
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
const path = require("path");
const buffer_1 = require("../buffer");
const ascii_1 = require("../transport/ascii");
const config_1 = require("../config");
const util_1 = require("../util");
const root = path.join(__dirname, '../../data');
let definitions;
let session;
let views;
let structure;
let tp;
const testTags = [
new buffer_1.TagPos(0, 120, 0, 1),
new buffer_1.TagPos(1, 50, 1, 1),
new buffer_1.TagPos(2, 50, 2, 1),
new buffer_1.TagPos(3, 120, 3, 1),
new buffer_1.TagPos(4, 100, 4, 1)
];
const expected = [
new buffer_1.TagPos(1, 50, 1, 1),
new buffer_1.TagPos(2, 50, 2, 1),
new buffer_1.TagPos(4, 100, 4, 1),
new buffer_1.TagPos(0, 120, 0, 1),
new buffer_1.TagPos(3, 120, 3, 1)
];
const unsortedLogon = [
new buffer_1.TagPos(0, 8, 2, 6),
new buffer_1.TagPos(1, 9, 11, 7),
new buffer_1.TagPos(2, 35, 22, 1),
new buffer_1.TagPos(3, 49, 27, 9),
new buffer_1.TagPos(4, 56, 40, 9),
new buffer_1.TagPos(5, 34, 53, 1),
new buffer_1.TagPos(6, 57, 58, 5),
new buffer_1.TagPos(7, 52, 67, 21),
new buffer_1.TagPos(8, 98, 92, 1),
new buffer_1.TagPos(9, 108, 98, 5),
new buffer_1.TagPos(10, 95, 107, 2),
new buffer_1.TagPos(11, 96, 113, 20),
new buffer_1.TagPos(12, 141, 138, 1),
new buffer_1.TagPos(13, 789, 144, 4),
new buffer_1.TagPos(14, 383, 153, 2),
new buffer_1.TagPos(15, 384, 160, 1),
new buffer_1.TagPos(16, 372, 166, 5),
new buffer_1.TagPos(17, 385, 176, 1),
new buffer_1.TagPos(18, 464, 182, 1),
new buffer_1.TagPos(19, 553, 188, 3),
new buffer_1.TagPos(20, 554, 196, 11)
];
beforeAll(() => __awaiter(this, void 0, void 0, function* () {
const sessionDescription = require(path.join(root, 'session/test-initiator.json'));
definitions = yield util_1.getDefinitions(sessionDescription.application.dictionary);
const config = new config_1.JsFixConfig(null, definitions, sessionDescription, buffer_1.Ascii.Pipe);
session = new ascii_1.AsciiMsgTransmitter(config);
views = yield util_1.replayFixFile(definitions, sessionDescription, path.join(root, 'examples/FIX.4.4/quickfix/logon/fix.txt'), buffer_1.Ascii.Pipe);
if (views && views.length > 0) {
structure = views[0].structure;
tp = views[0].structure.tags.tagPos.slice(0, views[0].segment.endPosition);
}
}), 45000);
test('logon tags parsed fully', () => {
expect(tp).toEqual(unsortedLogon);
});
test('expect tags to sort in tag first order', () => {
const sorted = testTags.slice().sort(buffer_1.TagPos.compare);
const sortedTags = sorted.map(e => e.tag);
expect(sortedTags).toEqual([50, 50, 100, 120, 120]);
});
test('expect tags to sort in tag then start order', () => {
const sorted = testTags.slice().sort(buffer_1.TagPos.compare);
expect(sorted[0].tag).toEqual(sorted[1].tag);
expect(sorted[0].start < sorted[1].start).toEqual(true);
});
test('expect start to carry with its tag', () => {
const sorted = testTags.slice().sort(buffer_1.TagPos.compare);
expect(sorted).toEqual(expected);
});
test('binary search on sorted', () => {
const sorted = testTags.slice().sort(buffer_1.TagPos.compare);
expect(buffer_1.TagPos.binarySearch(sorted, 100)).toEqual(2);
});
test('binary search for non existing tag', () => {
const sorted = testTags.slice().sort(buffer_1.TagPos.compare);
expect(buffer_1.TagPos.binarySearch(sorted, 1000) < 0).toEqual(true);
});
test('binary search duplicate tag', () => {
const sorted = testTags.slice().sort(buffer_1.TagPos.compare);
expect(buffer_1.TagPos.binarySearch(sorted, 50) <= 1).toEqual(true);
});
test('check logon', () => {
const sorted = tp.slice().sort(buffer_1.TagPos.compare);
expect(sorted[0].tag).toEqual(8);
expect(sorted[sorted.length - 1].tag).toEqual(789);
});
//# sourceMappingURL=ascii-tag-pos.test.js.map
;