import { it, describe } from 'mocha';
import { expect } from 'chai';

import Daemon from '../src/Daemon';
import Journal from '../src/Journal';
import Move from '../src/Move';

describe('Daemon', function() {
    it('Get prediction for beginning', function() {
        const daemon = new Daemon('d1', 2, 1, 1);
        expect('d1').to.equals(daemon.id);

        const predicted = daemon.predict(new Journal());
        expect(0).to.equals(predicted);
    });

    it('Can get power', function() {
        const d = new Daemon('d1', 2, 5, 8);
        expect(13).to.eqls(d.power);
    });

    it('Can adjust', function() {
        const journal = new Journal([new Move(0, 0), new Move(0, 0)]);
        const daemon = new Daemon('d1', 2, 1, 1, 0.1);
        daemon.adjust(journal, 1);
        expect({ '0:0:1': 1.1 ** 2 }).to.eqls(daemon.getWeights());
    });

    it('Daemon 1-1', function() {
        const journal = new Journal();
        const daemon = new Daemon('d1', 2, 1, 1, 0.1);

        const steps = [
            {
                prediction: 0,
                human: 1,
            },
            {
                prediction: 0,
                human: 1,
            },
            {
                prediction: 1,
                human: 1,
            },
            {
                prediction: 0,
                human: 1,
            },
            {
                prediction: 1,
                human: 1,
            },
        ];

        steps.forEach(step => {
            const prediction = daemon.predict(journal);
            expect(prediction).to.eqls(step.prediction);
            daemon.adjust(journal, step.human);
            journal.makeMove(step.human, step.prediction);
        });
    });
});