<%
  def self.avg(xs)
    xs.inject(0, :+) / xs.length
  end

  def self.amortize(file)
    # We remove the first one to mitigate cache effects
    times = time_compilation(file, 6.times)
    times.shift
    avg(times.map { |_, t| t })
  end
%>

{
  "chart": {
    "type": "column"
  },
  "legend": {
    "enabled": false
  },
  "xAxis": {
    "type": "category"
  },
  "title": {
    "text": "Including various metaprogramming libraries"
  },
  "plotOptions": {
    "series": {
      "borderWidth": 0,
      "dataLabels": {
        "enabled": true,
        "format": "{point.y:.5f}s"
      }
    }
  },
  "series": [{
    "name": "Include time",
    "colorByPoint": true,
    "data": [
      {
        "name": "Baseline (no includes)",
        "y": <%= amortize('baseline.erb.cpp') %>
      }, {
        "name": "Boost.Hana",
        "y": <%= amortize('hana.erb.cpp') %>
      }

      <% if cmake_bool("@Boost_FOUND@") %>
      , {
        "name": "Boost.MPL",
        "y": <%= amortize('mpl.erb.cpp') %>
      }, {
        "name": "Boost.Fusion",
        "y": <%= amortize('fusion.erb.cpp') %>
      }
      <% end %>

      <% if cmake_bool("@MPL11_FOUND@") %>
      , {
        "name": "MPL11",
        "y": <%= amortize('mpl11.erb.cpp') %>
      }
      <% end %>

      <% if cmake_bool("@Meta_FOUND@") %>
      , {
        "name": "Meta",
        "y": <%= amortize('meta.erb.cpp') %>
      }
      <% end %>
    ]
  }]
}
