Code coverage report for ranking/spec/ranking-set.spec.js

Statements: 100% (34 / 34)      Branches: 75% (3 / 4)      Functions: 100% (17 / 17)      Lines: 100% (33 / 33)      Ignored: none     

All files » ranking/spec/ » ranking-set.spec.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199    1   1   1   1   1 1 6     1 1           1 1 2 2   2       1 1     1 1             1 1 2     1 1                                                               1 1 1     1 1                                                                                                                             1 1 1     1 1                                                                                    
'use strict';
 
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
 
var _chai = require('chai');
 
var _src = require('../src');
 
var _src2 = _interopRequireDefault(_src);
 
describe('ranking-set', function () {
  beforeEach(function () {
    this.ranking = new _src2['default']({ maxScore: 30, branchFactor: 3 });
  });
 
  it('should start with only the root node', function () {
    (0, _chai.expect)(this.ranking.tree).to.eql({
      amount: 0,
      children: null
    });
  });
 
  describe('given an player with a non-number id', function () {
    beforeEach(function () {
      try {
        this.ranking.setScore({ score: 4, playerId: 'jack' });
      } catch (e) {
        this.errorMessage = e;
      }
    });
 
    it('should throw an expection', function () {
      (0, _chai.expect)(this.errorMessage).to.eql(new Error('playerId must be a number'));
    });
 
    it('should not inlcude him in the ranking', function () {
      (0, _chai.expect)(this.ranking.tree).to.eql({
        amount: 0,
        children: null
      });
    });
  });
 
  describe('given an player with score 4', function () {
    beforeEach(function () {
      this.ranking.setScore({ score: 4, playerId: 10 });
    });
 
    it('should stores the player\'s id in the node for score 4', function () {
      (0, _chai.expect)(this.ranking.tree).to.eql({
        amount: 1,
        children: [
        // 0-9
        {
          amount: 1,
          children: [
          // 0-2
          { amount: 0 },
          // 3-5
          {
            amount: 1,
            children: [
            // 3
            { amount: 0 },
            // 4
            {
              amount: 1,
              score: 4,
              playerIds: [10]
            }, { amount: 0 }]
          },
          // 6-9
          { amount: 0 }]
        },
        // 10-19
        { amount: 0 },
        // 20-29
        { amount: 0 }]
      });
    });
 
    describe('given an player with score 18', function () {
      beforeEach(function () {
        this.ranking.setScore({ score: 18, playerId: 15 });
      });
 
      it('should stores the player\'s id in the node for score 18', function () {
        (0, _chai.expect)(this.ranking.tree).to.eql({
          amount: 2,
          children: [
          // 0-9
          {
            amount: 1,
            children: [
            // 0-2
            { amount: 0 },
            // 3-5
            {
              amount: 1,
              children: [
              // 3
              { amount: 0 },
              // 4
              {
                amount: 1,
                score: 4,
                playerIds: [10]
              }, { amount: 0 }]
            },
            // 6-9
            { amount: 0 }]
          },
          // 10-19
          {
            amount: 1,
            children: [
            // 10-12
            { amount: 0 },
            // 13-15
            { amount: 0 },
            // 16-19
            {
              amount: 1,
              children: [
              // 16
              { amount: 0 },
              // 17
              { amount: 0 },
              // 18-19
              {
                amount: 1,
                children: [
                // 18
                {
                  amount: 1,
                  score: 18,
                  playerIds: [15]
                },
                // 19
                { amount: 0 }]
              }]
            }]
          },
          // 20-29
          { amount: 0 }]
        });
      });
    });
  });
 
  describe('given an player with score 9', function () {
    beforeEach(function () {
      this.ranking.setScore({ score: 9, playerId: 10 });
    });
 
    it('should stores the player\'s id in the node for score 9', function () {
      (0, _chai.expect)(this.ranking.tree).to.eql({
        amount: 1,
        children: [
        // 0-9
        {
          amount: 1,
          children: [
          // 0-2
          { amount: 0 },
          // 3-5
          { amount: 0 },
          // 6-9
          {
            amount: 1,
            children: [
            // 6
            { amount: 0 },
            // 7
            { amount: 0 },
            // 8-9
            {
              amount: 1,
              children: [
              // 8
              { amount: 0 },
              // 9
              {
                amount: 1,
                score: 9,
                playerIds: [10]
              }]
            }]
          }]
        },
        // 10-19
        { amount: 0 },
        // 20-29
        { amount: 0 }]
      });
    });
  });
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9tYXhjbnVuZXMvRGV2ZWxvcG1lbnQvbWUvcmFua2luZy9zcGVjL3Jhbmtpbmctc2V0LnNwZWMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztvQkFBdUIsTUFBTTs7bUJBQ1QsUUFBUTs7OztBQUc1QixRQUFRLENBQUMsYUFBYSxFQUFFLFlBQVk7QUFDbEMsWUFBVSxDQUFDLFlBQVk7QUFDckIsUUFBSSxDQUFDLE9BQU8sR0FBRyxxQkFBWSxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsWUFBWSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7R0FDL0QsQ0FBQyxDQUFDOztBQUVILElBQUUsQ0FBQyxzQ0FBc0MsRUFBRSxZQUFZO0FBQ3JELGNBVkssTUFBTSxFQVVKLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQztBQUMvQixZQUFNLEVBQUUsQ0FBQztBQUNULGNBQVEsRUFBRSxJQUFJO0tBQ2YsQ0FBQyxDQUFDO0dBQ0osQ0FBQyxDQUFDOztBQUVILFVBQVEsQ0FBQyxzQ0FBc0MsRUFBRSxZQUFZO0FBQzNELGNBQVUsQ0FBQyxZQUFZO0FBQ3JCLFVBQUk7QUFDRixZQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7T0FDdkQsQ0FBQyxPQUFPLENBQUMsRUFBRTtBQUNWLFlBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDO09BQ3ZCO0tBQ0YsQ0FBQyxDQUFDOztBQUVILE1BQUUsQ0FBQywyQkFBMkIsRUFBRSxZQUFZO0FBQzFDLGdCQTFCRyxNQUFNLEVBMEJGLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLDJCQUEyQixDQUFDLENBQUMsQ0FBQztLQUMxRSxDQUFDLENBQUM7O0FBRUgsTUFBRSxDQUFDLHVDQUF1QyxFQUFF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QUNGO2FBQ0YsQ0FDRjtXQUNGLENBQ0Y7U0FDRjs7QUFFRCxVQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUU7O0FBRWIsVUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQ2Q7T0FDRixDQUFDLENBQUM7S0FDSixDQUFDLENBQUM7R0FDSixDQUFDLENBQUM7Q0FDSixDQUFDLENBQUMiLCJmaWxlIjoiL1VzZXJzL21heGNudW5lcy9EZXZlbG9wbWVudC9tZS9yYW5raW5nL3NwZWMvcmFua2luZy1zZXQuc3BlYy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGV4cGVjdCB9IGZyb20gJ2NoYWknO1xuaW1wb3J0IFJhbmtpbmcgZnJvbSAnLi4vc3JjJztcblxuXG5kZXNjcmliZSgncmFua2luZy1zZXQnLCBmdW5jdGlvbiAoKSB7XG4gIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xuICAgIHRoaXMucmFua2luZyA9IG5ldyBSYW5raW5nKHsgbWF4U2NvcmU6IDMwLCBicmFuY2hGYWN0b3I6IDMgfSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgc3RhcnQgd2l0aCBvbmx5IHRoZSByb290IG5vZGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgZXhwZWN0KHRoaXMucmFua2luZy50cmVlKS50by5lcWwoe1xuICAgICAgYW1vdW50OiAwLFxuICAgICAgY2hpbGRyZW46IG51bGxcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2dpdmVuIGFuIHBsYXllciB3aXRoIGEgbm9uLW51bWJlciBpZCcsIGZ1bmN0aW9uICgpIHtcbiAgICBiZWZvcmVFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMucmFua2luZy5zZXRTY29yZSh7IHNjb3JlOiA0LCBwbGF5ZXJJZDogJ2phY2snIH0pO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IGU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGFuIGV4cGVjdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGV4cGVjdCh0aGlzLmVycm9yTWVzc2FnZSkudG8uZXFsKG5ldyBFcnJvcigncGxheWVySWQgbXVzdCBiZSBhIG51bWJlcicpKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgbm90IGlubGN1ZGUgaGltIGluIHRoZSByYW5raW5nJywgZnVuY3Rpb24gKCkge1xuICAgICAgZXhwZWN0KHRoaXMucmFua2luZy50cmVlKS50by5lcWwoe1xuICAgICAgICBhbW91bnQ6IDAsXG4gICAgICAgIGNoaWxkcmVuOiBudWxsXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2dpdmVuIGFuIHBsYXllciB3aXRoIHNjb3JlIDQnLCBmdW5jdGlvbiAoKSB7XG4gICAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICB0aGlzLnJhbmtpbmcuc2V0U2NvcmUoeyBzY29yZTogNCwgcGxheWVySWQ6IDEwIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBzdG9yZXMgdGhlIHBsYXllclxcJ3MgaWQgaW4gdGhlIG5vZGUgZm9yIHNjb3JlIDQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBleHBlY3QodGhpcy5yYW5raW5nLnRyZWUpLnRvLmVxbCh7XG4gICAgICAgIGFtb3VudDogMSxcbiAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAvLyAwLTlcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhbW91bnQ6IDEsXG4gICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAvLyAwLTJcbiAgICAgICAgICAgICAgeyBhbW91bnQ6IDAgfSxcbiAgICAgICAgICAgICAgLy8gMy01XG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhbW91bnQ6IDEsXG4gICAgICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgICAgIC8vIDNcbiAgICAgICAgICAgICAgICAgIHsgYW1vdW50OiAwIH0sXG4gICAgICAgICAgICAgICAgICAvLyA0XG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGFtb3VudDogMSxcbiAgICAgICAgICAgICAgICAgICAgc2NvcmU6IDQsXG4gICAgICAgICAgICAgICAgICAgIHBsYXllcklkczogWyAxMCBdXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgeyBhbW91bnQ6IDAgfVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgLy8gNi05XG4gICAgICAgICAgICAgIHsgYW1vdW50OiAwIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIC8vIDEwLTE5XG4gICAgICAgICAgeyBhbW91bnQ6IDAgfSxcbiAgICAgICAgICAvLyAyMC0yOVxuICAgICAgICAgIHsgYW1vdW50OiAwIH1cbiAgICAgICAgXVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnZ2l2ZW4gYW4gcGxheWVyIHdpdGggc2NvcmUgMTgnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBiZWZvcmVFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5yYW5raW5nLnNldFNjb3JlKHsgc2NvcmU6IDE4LCBwbGF5ZXJJZDogMTUgfSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBzdG9yZXMgdGhlIHBsYXllclxcJ3MgaWQgaW4gdGhlIG5vZGUgZm9yIHNjb3JlIDE4JywgZnVuY3Rpb24gKCkge1xuICAgICAgICBleHBlY3QodGhpcy5yYW5raW5nLnRyZWUpLnRvLmVxbCh7XG4gICAgICAgICAgYW1vdW50OiAyLFxuICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAvLyAwLTlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgYW1vdW50OiAxLFxuICAgICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAgIC8vIDAtMlxuICAgICAgICAgICAgICAgIHsgYW1vdW50OiAwIH0sXG4gICAgICAgICAgICAgICAgLy8gMy01XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgYW1vdW50OiAxLFxuICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgICAgICAgLy8gM1xuICAgICAgICAgICAgICAgICAgICB7IGFtb3VudDogMCB9LFxuICAgICAgICAgICAgICAgICAgICAvLyA0XG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICBhbW91bnQ6IDEsXG4gICAgICAgICAgICAgICAgICAgICAgc2NvcmU6IDQsXG4gICAgICAgICAgICAgICAgICAgICAgcGxheWVySWRzOiBbIDEwIF1cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgeyBhbW91bnQ6IDAgfVxuICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgLy8gNi05XG4gICAgICAgICAgICAgICAgeyBhbW91bnQ6IDAgfVxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLy8gMTAtMTlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgYW1vdW50OiAxLFxuICAgICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAgIC8vIDEwLTEyXG4gICAgICAgICAgICAgICAgeyBhbW91bnQ6IDAgfSxcbiAgICAgICAgICAgICAgICAvLyAxMy0xNVxuICAgICAgICAgICAgICAgIHsgYW1vdW50OiAwIH0sXG4gICAgICAgICAgICAgICAgLy8gMTYtMTlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBhbW91bnQ6IDEsXG4gICAgICAgICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAgICAgICAvLyAxNlxuICAgICAgICAgICAgICAgICAgICB7IGFtb3VudDogMCB9LFxuICAgICAgICAgICAgICAgICAgICAvLyAxN1xuICAgICAgICAgICAgICAgICAgICB7IGFtb3VudDogMCB9LFxuICAgICAgICAgICAgICAgICAgICAvLyAxOC0xOVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgYW1vdW50OiAxLFxuICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAxOFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBhbW91bnQ6IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3JlOiAxOCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcGxheWVySWRzOiBbIDE1IF1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAxOVxuICAgICAgICAgICAgICAgICAgICAgICAgeyBhbW91bnQ6IDAgfVxuICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC8vIDIwLTI5XG4gICAgICAgICAgICB7IGFtb3VudDogMCB9XG4gICAgICAgICAgXVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZ2l2ZW4gYW4gcGxheWVyIHdpdGggc2NvcmUgOScsIGZ1bmN0aW9uICgpIHtcbiAgICBiZWZvcmVFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIHRoaXMucmFua2luZy5zZXRTY29yZSh7IHNjb3JlOiA5LCBwbGF5ZXJJZDogMTAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHN0b3JlcyB0aGUgcGxheWVyXFwncyBpZCBpbiB0aGUgbm9kZSBmb3Igc2NvcmUgOScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGV4cGVjdCh0aGlzLnJhbmtpbmcudHJlZSkudG8uZXFsKHtcbiAgICAgICAgYW1vdW50OiAxLFxuICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgIC8vIDAtOVxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFtb3VudDogMSxcbiAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgIC8vIDAtMlxuICAgICAgICAgICAgICB7IGFtb3VudDogMCB9LFxuICAgICAgICAgICAgICAvLyAzLTVcbiAgICAgICAgICAgICAgeyBhbW91bnQ6IDAgfSxcbiAgICAgICAgICAgICAgLy8gNi05XG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhbW91bnQ6IDEsXG4gICAgICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgICAgIC8vIDZcbiAgICAgICAgICAgICAgICAgIHsgYW1vdW50OiAwIH0sXG4gICAgICAgICAgICAgICAgICAvLyA3XG4gICAgICAgICAgICAgICAgICB7IGFtb3VudDogMCB9LFxuICAgICAgICAgICAgICAgICAgLy8gOC05XG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGFtb3VudDogMSxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgICAgICAgICAvLyA4XG4gICAgICAgICAgICAgICAgICAgICAgeyBhbW91bnQ6IDAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAvLyA5XG4gICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgYW1vdW50OiAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2NvcmU6IDksXG4gICAgICAgICAgICAgICAgICAgICAgICBwbGF5ZXJJZHM6IFsgMTAgXVxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgLy8gMTAtMTlcbiAgICAgICAgICB7IGFtb3VudDogMCB9LFxuICAgICAgICAgIC8vIDIwLTI5XG4gICAgICAgICAgeyBhbW91bnQ6IDAgfVxuICAgICAgICBdXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==