'use strict';

import * as helpers from './helpers';
import * as random from './random';
import log4js from 'log4js';
import 'should';

/**
 * @test {random}
 */
describe('random', () => {

  const logger = log4js.getLogger('test');

  before(() => {
    log4js.configure(helpers.assembleLog4jsConfig());
  });

  /**
   * @test {getIntegerBetween}
   */
  describe('getIntegerBetween', () => {

    /**
     * @test {getIntegerBetween}
     */
    it('should return random integer between two specified inclusive integers', () => {
      let numbers = new Set();
      for (let i = 0; i < 100; ++i) {
        let number = random.getIntegerBetween(28, 101);
        logger.info('Generated number', number);
        number.should.be.greaterThanOrEqual(28);
        number.should.be.lessThanOrEqual(101);
        numbers.add(number);
      }
      numbers.size.should.be.greaterThan(10);
    });

    /**
     * @test {getIntegerBetween}
     */
    it('should return random integer between two specified floats', () => {
      let numbers = new Set();
      for (let i = 0; i < 100; ++i) {
        let number = random.getIntegerBetween(28.5, 101.5);
        logger.info('Generated number', number);
        number.should.be.greaterThanOrEqual(29);
        number.should.be.lessThanOrEqual(101);
        numbers.add(number);
      }
      numbers.size.should.be.greaterThan(10);
    });

    /**
     * @test {getIntegerBetween}
     */
    it('should return random integer between two negative numbers', () => {
      let numbers = new Set();
      for (let i = 0; i < 100; ++i) {
        let number = random.getIntegerBetween(-101.5, -28.5);
        logger.info('Generated number', number);
        number.should.be.greaterThanOrEqual(-102);
        number.should.be.lessThanOrEqual(-28);
        numbers.add(number);
      }
      numbers.size.should.be.greaterThan(10);
    });

  });

  /**
   * @test {getIntegerAround}
   */
  describe('getIntegerAround', () => {

    /**
     * @test {getIntegerAround}
     */
    it('should return integer around specified one', () => {
      let numbers = new Set();
      for (let i = 0; i < 100; ++i) {
        let number = random.getIntegerAround(28, 0.5);
        logger.info('Generated number', number);
        number.should.be.greaterThanOrEqual(14);
        number.should.be.lessThanOrEqual(42);
        numbers.add(number);
      }
      numbers.size.should.be.greaterThan(5);
    });

  });

});
