Home | History | Annotate | Download | only in Collections
      1 // Copyright 2014 the V8 project authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 
      6 var MapSmiBenchmark = new BenchmarkSuite('Map-Smi', [1000], [
      7   new Benchmark('Set', false, false, 0, MapSetSmi, MapSetupSmiBase, MapTearDown),
      8   new Benchmark('Has', false, false, 0, MapHasSmi, MapSetupSmi, MapTearDown),
      9   new Benchmark('Get', false, false, 0, MapGetSmi, MapSetupSmi, MapTearDown),
     10   new Benchmark('Delete', false, false, 0, MapDeleteSmi, MapSetupSmi, MapTearDown),
     11 ]);
     12 
     13 
     14 var MapStringBenchmark = new BenchmarkSuite('Map-String', [1000], [
     15   new Benchmark('Set', false, false, 0, MapSetString, MapSetupStringBase, MapTearDown),
     16   new Benchmark('Has', false, false, 0, MapHasString, MapSetupString, MapTearDown),
     17   new Benchmark('Get', false, false, 0, MapGetString, MapSetupString, MapTearDown),
     18   new Benchmark('Delete', false, false, 0, MapDeleteString, MapSetupString, MapTearDown),
     19 ]);
     20 
     21 
     22 var MapObjectBenchmark = new BenchmarkSuite('Map-Object', [1000], [
     23   new Benchmark('Set', false, false, 0, MapSetObject, MapSetupObjectBase, MapTearDown),
     24   new Benchmark('Has', false, false, 0, MapHasObject, MapSetupObject, MapTearDown),
     25   new Benchmark('Get', false, false, 0, MapGetObject, MapSetupObject, MapTearDown),
     26   new Benchmark('Delete', false, false, 0, MapDeleteObject, MapSetupObject, MapTearDown),
     27 ]);
     28 
     29 
     30 var MapIterationBenchmark = new BenchmarkSuite('Map-Iteration', [1000], [
     31   new Benchmark('ForEach', false, false, 0, MapForEach, MapSetupSmi, MapTearDown),
     32 ]);
     33 
     34 
     35 var map;
     36 
     37 
     38 function MapSetupSmiBase() {
     39   SetupSmiKeys();
     40   map = new Map;
     41 }
     42 
     43 
     44 function MapSetupSmi() {
     45   MapSetupSmiBase();
     46   MapSetSmi();
     47 }
     48 
     49 
     50 function MapSetupStringBase() {
     51   SetupStringKeys();
     52   map = new Map;
     53 }
     54 
     55 
     56 function MapSetupString() {
     57   MapSetupStringBase();
     58   MapSetString();
     59 }
     60 
     61 
     62 function MapSetupObjectBase() {
     63   SetupObjectKeys();
     64   map = new Map;
     65 }
     66 
     67 
     68 function MapSetupObject() {
     69   MapSetupObjectBase();
     70   MapSetObject();
     71 }
     72 
     73 
     74 function MapTearDown() {
     75   map = null;
     76 }
     77 
     78 
     79 function MapSetSmi() {
     80   for (var i = 0; i < N; i++) {
     81     map.set(keys[i], i);
     82   }
     83 }
     84 
     85 
     86 function MapHasSmi() {
     87   for (var i = 0; i < N; i++) {
     88     if (!map.has(keys[i])) {
     89       throw new Error();
     90     }
     91   }
     92   for (var i = N; i < 2 * N; i++) {
     93     if (map.has(keys[i])) {
     94       throw new Error();
     95     }
     96   }
     97 }
     98 
     99 
    100 function MapGetSmi() {
    101   for (var i = 0; i < N; i++) {
    102     if (map.get(keys[i]) !== i) {
    103       throw new Error();
    104     }
    105   }
    106   for (var i = N; i < 2 * N; i++) {
    107     if (map.get(keys[i]) !== undefined) {
    108       throw new Error();
    109     }
    110   }
    111 }
    112 
    113 
    114 function MapDeleteSmi() {
    115   // This is run more than once per setup so we will end up deleting items
    116   // more than once. Therefore, we do not the return value of delete.
    117   for (var i = 0; i < N; i++) {
    118     map.delete(keys[i]);
    119   }
    120 }
    121 
    122 
    123 function MapSetString() {
    124   for (var i = 0; i < N; i++) {
    125     map.set(keys[i], i);
    126   }
    127 }
    128 
    129 
    130 function MapHasString() {
    131   for (var i = 0; i < N; i++) {
    132     if (!map.has(keys[i])) {
    133       throw new Error();
    134     }
    135   }
    136   for (var i = N; i < 2 * N; i++) {
    137     if (map.has(keys[i])) {
    138       throw new Error();
    139     }
    140   }
    141 }
    142 
    143 
    144 function MapGetString() {
    145   for (var i = 0; i < N; i++) {
    146     if (map.get(keys[i]) !== i) {
    147       throw new Error();
    148     }
    149   }
    150   for (var i = N; i < 2 * N; i++) {
    151     if (map.get(keys[i]) !== undefined) {
    152       throw new Error();
    153     }
    154   }
    155 }
    156 
    157 
    158 function MapDeleteString() {
    159   // This is run more than once per setup so we will end up deleting items
    160   // more than once. Therefore, we do not the return value of delete.
    161   for (var i = 0; i < N; i++) {
    162     map.delete(keys[i]);
    163   }
    164 }
    165 
    166 
    167 function MapSetObject() {
    168   for (var i = 0; i < N; i++) {
    169     map.set(keys[i], i);
    170   }
    171 }
    172 
    173 
    174 function MapHasObject() {
    175   for (var i = 0; i < N; i++) {
    176     if (!map.has(keys[i])) {
    177       throw new Error();
    178     }
    179   }
    180   for (var i = N; i < 2 * N; i++) {
    181     if (map.has(keys[i])) {
    182       throw new Error();
    183     }
    184   }
    185 }
    186 
    187 
    188 function MapGetObject() {
    189   for (var i = 0; i < N; i++) {
    190     if (map.get(keys[i]) !== i) {
    191       throw new Error();
    192     }
    193   }
    194   for (var i = N; i < 2 * N; i++) {
    195     if (map.get(keys[i]) !== undefined) {
    196       throw new Error();
    197     }
    198   }
    199 }
    200 
    201 
    202 function MapDeleteObject() {
    203   // This is run more than once per setup so we will end up deleting items
    204   // more than once. Therefore, we do not the return value of delete.
    205   for (var i = 0; i < N; i++) {
    206     map.delete(keys[i]);
    207   }
    208 }
    209 
    210 
    211 function MapForEach() {
    212   map.forEach(function(v, k) {
    213     if (v !== k) {
    214       throw new Error();
    215     }
    216   });
    217 }
    218