public void detect_no_anomalies_if_rates_are_set_to_min_max_value()
        {
            var strategy      = new RelativeRateOfChangeStrategy(int.MinValue, int.MaxValue);
            var anomalyResult = strategy.Detect(data, (0, int.MaxValue));
            var expected      = Enumerable.Empty <(int, Anomaly)>();

            anomalyResult.SequenceEqual(expected).ShouldBeTrue();
        }
        public void attribute_indices_correctly_for_higher_orders_without_search_interval()
        {
            var data = new[] { 0.0, 1.0, 3.0, 6.0, 18.0, 72.0 };

            var strategy      = new RelativeRateOfChangeStrategy(Option <double> .None, 8.0, 2);
            var anomalyResult = strategy.Detect(data, (0, int.MaxValue));

            var expected = new[]
        public void ignore_max_rate_if_none_is_given()
        {
            var strategy      = new RelativeRateOfChangeStrategy(0.5, Option <double> .None);
            var anomalyResult = strategy.Detect(data, (0, int.MaxValue));
            var expected      = Enumerable
                                .Range(21, 11)
                                .Where(i => i % 2 != 0)
                                .Select(value => (value, new Anomaly(data[value], 1.0)));

            anomalyResult.SequenceEqual(expected).ShouldBeTrue();
        }