import { expect, assert } from 'chai';
import { describe } from 'mocha';
import { split, eEstimate, eSum } from '../../src/index.js';


/**
 * 
 * @param sum 
 * @param expected 
 */
function check(sum: number[][], expected: number) {
    let result = eSum(sum);
    expect(eEstimate(result)).to.eql(expected);
}


describe('eCalculate sum', function() {
	it('should calculate sum correctly',
	function() {
        // zero should equal 0
        check(
            [[0]],
            0
        );

        // zero add zero is still zero
        check(
            [[0],[0]],
            0
        );

        // 6 plus 4 === 10
        check(
            [[6], [4]],
            10
        );

        // 0.1 + 0.2 === 0.3ish
        check(
            [[0.1], [0.2]],
            0.30000000000000004
        );

        // 2 + 24 + 6 === 32
        check(
            [[2], [24], [6]],
            32
        );

        // some complicated sum
        // 0.00289080862514 + 
        // 8.11206277735137373945878448 + 
        // 7.71722568769361084779904
        check(
            [[0.00289080862514], 
             [8.11206277735137373945878448], 
             [7.71722568769361084779904]],
            15.83217927367012458725782448
        );

        // some more complicated sum
        // 0.123421*0.1*0.2342234 + 
        // 0.23345554*2.123123*3.76564*4.3462346 + 
        // 3.2354123*2.1231232*1.123456789 = 15.83217927367012458725782448
        check(
            [
                split(0.00289080862514).reverse(), 
                split(8.11206277735137373945878448).reverse(),
                split(7.71722568769361084779904).reverse(),
            ],
            15.83217927367012458725782448
        );
	});
});


