public void FacetRangeResult001()
        {
            // Arrange
            var jObject = JObject.Parse(@"
            {
                  ""facet_counts"":{
                    ""facet_ranges"":{
                        ""facetRange"": {
                            ""counts"": [
                              ""10"", 2,
                              ""70"", 1,
                              ""90"", 1
                            ],
                            ""gap"": 10,
                            ""start"": 10,
                            ""end"": 100,
                            ""before"": 34,
                            ""after"": 9}}}
            }");

            var expressionCache   = new ExpressionCache <TestDocumentWithAnyPropertyTypes>();
            var expressionBuilder = (IExpressionBuilder <TestDocumentWithAnyPropertyTypes>) new ExpressionBuilder <TestDocumentWithAnyPropertyTypes>(expressionCache);

            var parameters = new List <ISearchParameter> {
                new FacetRangeParameter <TestDocumentWithAnyPropertyTypes>(expressionBuilder).Configure("facetRange", q => q.PropInteger, "10", "10", "100")
            };
            var result = new FacetRangeResult <TestDocumentWithAnyPropertyTypes>(expressionBuilder);

            // Act
            ((IConvertJsonObject)result).Execute(parameters, jObject);

            // Assert
            var data = result.Data.ToList();

            Assert.Equal(1, data.Count);
            Assert.Equal("facetRange", data[0].Name);
            Assert.Equal(5, data[0].Data.Count());
            Assert.IsType(typeof(FacetRange <int>), data[0].Data.First().Key);
            Assert.Equal(10, ((FacetRange <int>)data[0].Data.First().Key).MaximumValue.Value);
            Assert.Equal(34, data[0].Data.First().Quantity);
        }
        public void FacetRangeResult002()
        {
            // Arrange
            var jObject = JObject.Parse(@"
            {
                  ""facet_counts"":{
                    ""facet_ranges"":{
                      ""facetRange"":{
                        ""counts"":[
                            ""2014-06-22T20:33:00.741Z"",10,
                            ""2014-07-04T20:33:00.741Z"",10],
                        ""gap"":""+6DAYS"",
                        ""start"":""2014-06-22T20:33:00.741Z"",
                        ""end"":""2015-06-23T20:33:00.741Z"",
                        ""before"":3,
                        ""after"":9}}}
            }");

            var expressionCache   = new ExpressionCache <TestDocumentWithAnyPropertyTypes>();
            var expressionBuilder = (IExpressionBuilder <TestDocumentWithAnyPropertyTypes>) new ExpressionBuilder <TestDocumentWithAnyPropertyTypes>(expressionCache);

            var parameters = new List <ISearchParameter> {
                new FacetRangeParameter <TestDocumentWithAnyPropertyTypes>(expressionBuilder).Configure("facetRange", q => q.PropDateTime, "+10DAYS", "NOW/YEAR-1", "NOW/DAY+1")
            };
            var result = new FacetRangeResult <TestDocumentWithAnyPropertyTypes>(expressionBuilder);

            // Act
            ((IConvertJsonObject)result).Execute(parameters, jObject);

            // Assert
            var data = result.Data.ToList();

            Assert.Equal(1, data.Count);
            Assert.Equal("facetRange", data[0].Name);
            Assert.Equal(4, data[0].Data.Count());
            Assert.IsType(typeof(FacetRange <DateTime>), data[0].Data.First().Key);
            Assert.Equal(DateTime.Parse("2014-06-22T20:33:00.741Z").Date, ((FacetRange <DateTime>)data[0].Data.First().Key).MaximumValue.Value.Date);
            Assert.Equal(3, data[0].Data.First().Quantity);
        }