github.com/igggame/nebulas-go@v2.1.0+incompatible/nf/nvm/test/instruction_counter_tests/for.js (about)

     1  // Copyright (C) 2017 go-nebulas authors
     2  //
     3  // This file is part of the go-nebulas library.
     4  //
     5  // the go-nebulas library is free software: you can redistribute it and/or modify
     6  // it under the terms of the GNU General Public License as published by
     7  // the Free Software Foundation, either version 3 of the License, or
     8  // (at your option) any later version.
     9  //
    10  // the go-nebulas library is distributed in the hope that it will be useful,
    11  // but WITHOUT ANY WARRANTY; without even the implied warranty of
    12  // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    13  // GNU General Public License for more details.
    14  //
    15  // You should have received a copy of the GNU General Public License
    16  // along with the go-nebulas library.  If not, see <http://www.gnu.org/licenses/>.
    17  //
    18  
    19  const assert = require('assert.js');
    20  
    21  function assertEqual(func, args, expected, expected_count, msg) {
    22      const count_of_helper_statement = 46;
    23      var count = _instruction_counter.count;
    24      assert.equal(func.apply(null, args), expected);
    25      assert.equal(_instruction_counter.count - count - count_of_helper_statement, expected_count, msg);
    26  };
    27  
    28  // test1.
    29  var test1 = function (x) {
    30      var ret = 0;
    31      for (var i = 0; i < x; i++)
    32          ret += i;
    33      return ret;
    34  };
    35  assertEqual(test1, [0], 0, 3);
    36  assertEqual(test1, [10], 45, 10 * (9+1) + 3);
    37  assertEqual(test1, [11], 55, 11 * (9 + 1) + 3);
    38  assertEqual(test1, [23], 253, 23 * (9 + 1) + 3);
    39  
    40  // test2.
    41  var test2 = function (x) {
    42      var ret = 0;
    43      for (var i = 0; i < x && i < 20; ret++, i++) {
    44          ret += i;
    45      }
    46      return ret;
    47  }
    48  assertEqual(test2, [10], 55, 10 * (18 + 1) + 9);
    49  assertEqual(test2, [11], 66, 11 * (18 +1 ) + 9);
    50  assertEqual(test2, [20], 210, 20 * (18 + 1) + 9);
    51  assertEqual(test2, [23], 210, 20 * (18 + 1) + 9);
    52  
    53  // test3.
    54  var test3 = function (x) {
    55      var ret = 0;
    56      for (var i = 0; i < x; ret++, i++) {
    57          ret += i;
    58          if (i % 2 == 0) {
    59              continue;
    60          }
    61          ret += 1;
    62      }
    63      return ret;
    64  }
    65  assertEqual(test3, [1], 1, 1 * (18 + 1) + 3);
    66  assertEqual(test3, [10], 60, 10 * (18 + 1) + 3 + 10 / 2 * 3);
    67  assertEqual(test3, [11], 71, 11 * (18 + 1) + 3 + Math.floor(11 / 2) * 3);
    68  assertEqual(test3, [12], 84, 12 * (18 + 1) + 3 + Math.floor(12 / 2) * 3);
    69  
    70  // test4.
    71  var gen4X = function (a) {
    72      var x = new Array();
    73      for (var i = 0; i < a; i++) {
    74          x.push(i + 1);
    75      }
    76      return x;
    77  };
    78  var test4 = function (x) {
    79      var ret = 0;
    80      for (var i in x) {
    81          ret += x[i];
    82      }
    83      return ret;
    84  };
    85  assertEqual(test4, [gen4X(0)], 0, 0);
    86  assertEqual(test4, [gen4X(1)], 1, 9 * 1);
    87  assertEqual(test4, [gen4X(2)], 3, 9 * 2);
    88  assertEqual(test4, [gen4X(3)], 6, 9 * 3);
    89  
    90  // test5.
    91  var gen5X = function (a) {
    92      var x = new Object();
    93      for (var i = 0; i < a; i++) {
    94          x[i] = i + 1;
    95      }
    96      return x;
    97  }
    98  var test5 = function (x) {
    99      var ret = 0;
   100      for (var i in x)
   101          ret += x[i];
   102      return ret;
   103  };
   104  assertEqual(test5, [gen5X(0)], 0, 0);
   105  assertEqual(test5, [gen5X(1)], 1, 9 * 1);
   106  assertEqual(test5, [gen5X(2)], 3, 9 * 2);
   107  assertEqual(test5, [gen5X(10)], 55, 9 * 10);
   108  
   109  // test6.
   110  var gen6X = function (a) {
   111      var x = new Map();
   112      for (var i = 0; i < a; i++) {
   113          x.set(i, i + 1);
   114      }
   115      return x;
   116  };
   117  var test6 = function (x) {
   118      var ret = 0;
   119      for (var i of x.values())
   120          ret += i;
   121      return ret;
   122  };
   123  assertEqual(test6, [gen6X(0)], 0, 12);
   124  assertEqual(test6, [gen6X(1)], 1, 5 * 1 + 12);
   125  assertEqual(test6, [gen6X(2)], 3, 5 * 2 + 12);
   126  assertEqual(test6, [gen6X(10)], 55, 5 * 10 + 12);