Merge pull request #40 from grossman/scheduler_usage_diff_divide_by_zero

Avoid divide by zero in scheduler_usage/1 on lightly loaded systems.
diff --git a/src/recon_lib.erl b/src/recon_lib.erl
index dc72256..5a49cf3 100644
--- a/src/recon_lib.erl
+++ b/src/recon_lib.erl
@@ -218,7 +218,9 @@
     TotalTime :: non_neg_integer().
 scheduler_usage_diff(First, Last) ->
     lists:map(
-        fun({{I, A0, T0}, {I, A1, T1}}) -> {I, (A1 - A0)/(T1 - T0)} end,
+        fun ({{I, _A0, T}, {I, _A1, T}}) -> {I, 0.0}; % Avoid divide by zero
+            ({{I, A0, T0}, {I, A1, T1}}) -> {I, (A1 - A0)/(T1 - T0)}
+        end,
         lists:zip(lists:sort(First), lists:sort(Last))
     ).
 
diff --git a/test/recon_lib_SUITE.erl b/test/recon_lib_SUITE.erl
new file mode 100644
index 0000000..4a69df3
--- /dev/null
+++ b/test/recon_lib_SUITE.erl
@@ -0,0 +1,17 @@
+-module(recon_lib_SUITE).
+-include_lib("common_test/include/ct.hrl").
+-compile(export_all).
+
+all() -> [scheduler_usage_diff].
+
+scheduler_usage_diff(_Config) ->
+    {Active0, Total0} = {1000, 2000},
+    SchedStat0 = {1, Active0, Total0},
+    % No active or total time has elapsed. Make sure we don't divide by zero.
+    [{1, 0.0}] = recon_lib:scheduler_usage_diff([SchedStat0], [SchedStat0]),
+    % Total time has elapsed, but no active time. Make sure we get 0 usage back.
+    SchedStat1 = {1, Active0, Total0 * 2},
+    [{1, 0.0}] = recon_lib:scheduler_usage_diff([SchedStat0], [SchedStat1]),
+    % Check for 100% usage
+    SchedStat2 = {1, Active0 + 1000, Total0 + 1000},
+    [{1, 1.0}] = recon_lib:scheduler_usage_diff([SchedStat0], [SchedStat2]).