mirror of
https://github.com/javascript-obfuscator/javascript-obfuscator
synced 2026-08-09 12:42:29 +00:00
101 lines
3.4 KiB
TypeScript
101 lines
3.4 KiB
TypeScript
import 'reflect-metadata';
|
|
|
|
import { assert } from 'chai';
|
|
|
|
import { ServiceIdentifiers } from '../../../src/container/ServiceIdentifiers';
|
|
|
|
import { IInversifyContainerFacade } from '../../../src/interfaces/container/IInversifyContainerFacade';
|
|
import { IRandomGenerator } from '../../../src/interfaces/utils/IRandomGenerator';
|
|
|
|
import { InversifyContainerFacade } from '../../../src/container/InversifyContainerFacade';
|
|
|
|
describe('RandomGenerator', () => {
|
|
let randomGenerator: IRandomGenerator;
|
|
|
|
before(() => {
|
|
const inversifyContainerFacade: IInversifyContainerFacade = new InversifyContainerFacade();
|
|
|
|
inversifyContainerFacade.load('', '', {});
|
|
randomGenerator = inversifyContainerFacade.get<IRandomGenerator>(ServiceIdentifiers.IRandomGenerator);
|
|
});
|
|
|
|
describe('getRandomIntegerExcluding', () => {
|
|
describe('Variant #1: avoid excluded values', () => {
|
|
const samplesCount: number = 500;
|
|
|
|
const minValue: number = 5;
|
|
const maxValue: number = 10;
|
|
const valuesToExclude: number[] = [6, 9];
|
|
|
|
const expectedRandomIntegerValues: number[] = [5, 7, 8, 10];
|
|
|
|
let isRandomIntegerInAllowedValuesRange: boolean = true;
|
|
|
|
before(() => {
|
|
for (let i = 0; i < samplesCount; i++) {
|
|
const randomInteger = randomGenerator.getRandomIntegerExcluding(
|
|
minValue,
|
|
maxValue,
|
|
valuesToExclude
|
|
);
|
|
|
|
if (!expectedRandomIntegerValues.includes(randomInteger)) {
|
|
isRandomIntegerInAllowedValuesRange = false;
|
|
}
|
|
}
|
|
});
|
|
|
|
it('should return a random integer in allowed values range', () => {
|
|
assert.isTrue(isRandomIntegerInAllowedValuesRange);
|
|
});
|
|
});
|
|
|
|
describe('Variant #2: values boundaries', () => {
|
|
const samplesCount: number = 500;
|
|
|
|
const minValue: number = 5;
|
|
const maxValue: number = 10;
|
|
const valuesToExclude: number[] = [6, 9];
|
|
|
|
const delta: number = 0.15;
|
|
|
|
const expectedValueChance: number = 0.2;
|
|
|
|
let minValuesCount: number = 0;
|
|
let maxValuesCount: number = 0;
|
|
|
|
let minValueChance: number;
|
|
let maxValueChance: number;
|
|
|
|
before(() => {
|
|
for (let i = 0; i < samplesCount; i++) {
|
|
const randomInteger: number = randomGenerator.getRandomIntegerExcluding(
|
|
minValue,
|
|
maxValue,
|
|
valuesToExclude
|
|
);
|
|
|
|
if (randomInteger === minValue) {
|
|
minValuesCount += 1;
|
|
}
|
|
|
|
if (randomInteger === maxValue) {
|
|
maxValuesCount += 1;
|
|
}
|
|
|
|
minValueChance = minValuesCount / samplesCount;
|
|
maxValueChance = maxValuesCount / samplesCount;
|
|
}
|
|
});
|
|
|
|
it('should generate min values', () => {
|
|
assert.closeTo(minValueChance, expectedValueChance, delta);
|
|
});
|
|
|
|
it('should generate max values', () => {
|
|
assert.closeTo(maxValueChance, expectedValueChance, delta);
|
|
});
|
|
});
|
|
});
|
|
});
|