generate(collectedData) {
    const hashes = Object.keys(collectedData);

    for (let hash of hashes){
      const data = collectedData[hash];
      const contractPath = collectedData[hash].contractPath;
      const id = collectedData[hash].id;

      // NB: Any branch using the injected fn which returns boolean will have artificially
      // doubled hits (because of something internal to Solidity about how the stack is managed)
      const hits = collectedData[hash].hits;

      switch(collectedData[hash].type){
        case 'line':       this.data[contractPath].l[id] = hits;                   break;
        case 'function':   this.data[contractPath].f[id] = hits;                   break;
        case 'statement':  this.data[contractPath].s[id] = hits;                   break;
        case 'branch':     this.data[contractPath].b[id][data.locationIdx] = hits; break;
        case 'and-true':   this.data[contractPath].b[id][data.locationIdx] = hits; break;
        case 'or-false':   this.data[contractPath].b[id][data.locationIdx] = hits; break;
        case 'requirePre':  this.requireData[contractPath][id].preEvents = hits;   break;
        case 'requirePost': this.requireData[contractPath][id].postEvents = hits;  break;
      }
    }

    // Finally, interpret the assert pre/post events
    const contractPaths = Object.keys(this.requireData);

    for (let contractPath of contractPaths){
      const contract = this.data[contractPath];

      for (let i = 1; i <= Object.keys(contract.b).length; i++) {
        const branch = this.requireData[contractPath][i];

        // Was it an assert branch?
        if (branch && branch.preEvents > 0){
          this.data[contractPath].b[i] = [
            branch.postEvents,
            branch.preEvents - branch.postEvents
          ]
        }
      }
    }

    return Object.assign({}, this.data);
  }
Populates an empty coverage map with values derived from a hash map of
data collected as the instrumented contracts are tested
@param  {Object} map of collected instrumentation data
@return {Object} coverage map.