diff --git a/src/Nest/Aggregations/AggregationContainer.cs b/src/Nest/Aggregations/AggregationContainer.cs index 8fc38468cd6..57109260bd9 100644 --- a/src/Nest/Aggregations/AggregationContainer.cs +++ b/src/Nest/Aggregations/AggregationContainer.cs @@ -154,9 +154,18 @@ public interface IAggregationContainer IMinBucketAggregation MinBucket { get; set; } [JsonProperty("sum_bucket")] - ISumBucketAggregation SumBucket { get; set; } - - [JsonProperty("moving_avg")] + ISumBucketAggregation SumBucket { get; set; } + + [JsonProperty("stats_bucket")] + IStatsBucketAggregation StatsBucket { get; set; } + + [JsonProperty("extended_stats_bucket")] + IExtendedStatsBucketAggregation ExtendedStatsBucket { get; set; } + + [JsonProperty("percentiles_bucket")] + IPercentilesBucketAggregation PercentilesBucket { get; set; } + + [JsonProperty("moving_avg")] IMovingAverageAggregation MovingAverage { get; set; } [JsonProperty("cumulative_sum")] @@ -242,9 +251,15 @@ public class AggregationContainer : IAggregationContainer public IMinBucketAggregation MinBucket { get; set; } - public ISumBucketAggregation SumBucket { get; set; } - - public IMovingAverageAggregation MovingAverage { get; set; } + public ISumBucketAggregation SumBucket { get; set; } + + public IStatsBucketAggregation StatsBucket { get; set; } + + public IExtendedStatsBucketAggregation ExtendedStatsBucket { get; set; } + + public IPercentilesBucketAggregation PercentilesBucket { get; set; } + + public IMovingAverageAggregation MovingAverage { get; set; } public ICumulativeSumAggregation CumulativeSum { get; set; } @@ -349,9 +364,15 @@ public class AggregationContainerDescriptor : DescriptorBase MinBucket(string name, public AggregationContainerDescriptor SumBucket(string name, Func selector) => - _SetInnerAggregation(name, selector, (a, d) => a.SumBucket = d); - - public AggregationContainerDescriptor MovingAverage(string name, + _SetInnerAggregation(name, selector, (a, d) => a.SumBucket = d); + + public AggregationContainerDescriptor StatsBucket(string name, + Func selector) => + _SetInnerAggregation(name, selector, (a, d) => a.StatsBucket = d); + + public AggregationContainerDescriptor ExtendedStatsBucket(string name, + Func selector) => + _SetInnerAggregation(name, selector, (a, d) => a.ExtendedStatsBucket = d); + + public AggregationContainerDescriptor PercentilesBucket(string name, + Func selector) => + _SetInnerAggregation(name, selector, (a, d) => a.PercentilesBucket = d); + + public AggregationContainerDescriptor MovingAverage(string name, Func selector) => _SetInnerAggregation(name, selector, (a, d) => a.MovingAverage = d); diff --git a/src/Nest/Aggregations/AggregationsHelper.cs b/src/Nest/Aggregations/AggregationsHelper.cs index 2fd5f57c66d..7bb6f2b1675 100644 --- a/src/Nest/Aggregations/AggregationsHelper.cs +++ b/src/Nest/Aggregations/AggregationsHelper.cs @@ -53,13 +53,19 @@ public ScriptedMetricAggregate ScriptedMetric(string key) public StatsAggregate Stats(string key) => this.TryGet(key); - public ExtendedStatsAggregate ExtendedStats(string key) => this.TryGet(key); - - public GeoBoundsAggregate GeoBounds(string key) => this.TryGet(key); - - public PercentilesAggregate Percentiles(string key) => this.TryGet(key); - - public PercentilesAggregate PercentileRanks(string key) => this.TryGet(key); + public StatsAggregate StatsBucket(string key) => this.TryGet(key); + + public ExtendedStatsAggregate ExtendedStats(string key) => this.TryGet(key); + + public ExtendedStatsAggregate ExtendedStatsBucket(string key) => this.TryGet(key); + + public GeoBoundsAggregate GeoBounds(string key) => this.TryGet(key); + + public PercentilesAggregate Percentiles(string key) => this.TryGet(key); + + public PercentilesAggregate PercentilesBucket(string key) => this.TryGet(key); + + public PercentilesAggregate PercentileRanks(string key) => this.TryGet(key); public TopHitsAggregate TopHits(string key) => this.TryGet(key); diff --git a/src/Nest/Aggregations/Pipeline/ExtendedStatsBucket/ExtendedStatsBucketAggregation.cs b/src/Nest/Aggregations/Pipeline/ExtendedStatsBucket/ExtendedStatsBucketAggregation.cs new file mode 100644 index 00000000000..c40d1d9fa32 --- /dev/null +++ b/src/Nest/Aggregations/Pipeline/ExtendedStatsBucket/ExtendedStatsBucketAggregation.cs @@ -0,0 +1,25 @@ +using Newtonsoft.Json; + +namespace Nest +{ + [JsonObject(MemberSerialization = MemberSerialization.OptIn)] + [ContractJsonConverter(typeof(AggregationJsonConverter))] + public interface IExtendedStatsBucketAggregation : IPipelineAggregation { } + + public class ExtendedStatsBucketAggregation + : PipelineAggregationBase, IExtendedStatsBucketAggregation + { + internal ExtendedStatsBucketAggregation() { } + + public ExtendedStatsBucketAggregation(string name, SingleBucketsPath bucketsPath) + : base(name, bucketsPath) { } + + internal override void WrapInContainer(AggregationContainer c) => c.ExtendedStatsBucket = this; + } + + public class ExtendedStatsBucketAggregationDescriptor + : PipelineAggregationDescriptorBase + , IExtendedStatsBucketAggregation + { + } +} diff --git a/src/Nest/Aggregations/Pipeline/PercentilesBucket/PercentilesBucketAggregation.cs b/src/Nest/Aggregations/Pipeline/PercentilesBucket/PercentilesBucketAggregation.cs new file mode 100644 index 00000000000..ece334fa6b7 --- /dev/null +++ b/src/Nest/Aggregations/Pipeline/PercentilesBucket/PercentilesBucketAggregation.cs @@ -0,0 +1,42 @@ +using Newtonsoft.Json; +using System; +using System.Collections.Generic; +using System.Linq; + +namespace Nest +{ + [JsonObject(MemberSerialization = MemberSerialization.OptIn)] + [ContractJsonConverter(typeof(AggregationJsonConverter))] + public interface IPercentilesBucketAggregation : IPipelineAggregation + { + [JsonProperty("percents")] + IEnumerable Percents { get; set; } + } + + public class PercentilesBucketAggregation + : PipelineAggregationBase, IPercentilesBucketAggregation + { + public IEnumerable Percents { get; set; } + + internal PercentilesBucketAggregation() { } + + public PercentilesBucketAggregation(string name, SingleBucketsPath bucketsPath) + : base(name, bucketsPath) { } + + internal override void WrapInContainer(AggregationContainer c) => c.PercentilesBucket = this; + } + + public class PercentilesBucketAggregationDescriptor + : PipelineAggregationDescriptorBase + , IPercentilesBucketAggregation + { + IEnumerable IPercentilesBucketAggregation.Percents { get; set; } + + public PercentilesBucketAggregationDescriptor Percents(IEnumerable percentages) => + Assign(a => a.Percents = percentages?.ToList()); + + public PercentilesBucketAggregationDescriptor Percents(params double[] percentages) => + Assign(a => a.Percents = percentages?.ToList()); + + } +} diff --git a/src/Nest/Aggregations/Pipeline/StatsBucket/StatsBucketAggregation.cs b/src/Nest/Aggregations/Pipeline/StatsBucket/StatsBucketAggregation.cs new file mode 100644 index 00000000000..2b870c4832e --- /dev/null +++ b/src/Nest/Aggregations/Pipeline/StatsBucket/StatsBucketAggregation.cs @@ -0,0 +1,25 @@ +using Newtonsoft.Json; + +namespace Nest +{ + [JsonObject(MemberSerialization = MemberSerialization.OptIn)] + [ContractJsonConverter(typeof(AggregationJsonConverter))] + public interface IStatsBucketAggregation : IPipelineAggregation { } + + public class StatsBucketAggregation + : PipelineAggregationBase, IStatsBucketAggregation + { + internal StatsBucketAggregation() { } + + public StatsBucketAggregation(string name, SingleBucketsPath bucketsPath) + : base(name, bucketsPath) { } + + internal override void WrapInContainer(AggregationContainer c) => c.StatsBucket = this; + } + + public class StatsBucketAggregationDescriptor + : PipelineAggregationDescriptorBase + , IStatsBucketAggregation + { + } +} diff --git a/src/Nest/Nest.csproj b/src/Nest/Nest.csproj index c7ba0b5f176..b8b4294c405 100644 --- a/src/Nest/Nest.csproj +++ b/src/Nest/Nest.csproj @@ -1,1263 +1,1266 @@ - - - - - Debug - AnyCPU - {072BA7DA-7B60-407D-8B6E-95E3186BE70C} - Library - Properties - Nest - Nest - v4.5 - 512 - - false - - - true - full - false - ..\Nest\bin\Net45\Debug\ - DEBUG;TRACE - prompt - 4 - BasicCorrectnessRules.ruleset - AnyCPU - ..\Nest\bin\Net45\Debug\Nest.XML - false - 1591,1572,1571,1573,1587,1570 - false - - - pdbonly - True - ..\Nest\bin\Net45\Release\ - TRACE - prompt - 4 - AllRules.ruleset - ..\Nest\bin\Net45\Release\Nest.XML - 1591,1572,1571,1573,1587,1570 - false - - - true - - - ..\..\build\keys\keypair.snk - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - true - - - False - Windows Installer 3.1 - true - - - - - {E97CCF40-0BA6-43FE-9F2D-58D454134088} - Elasticsearch.Net - - - - - - - - - - - - - ..\..\packages\Newtonsoft.Json\lib\net35\Newtonsoft.Json.dll - True - True - - - - - - - ..\..\packages\Newtonsoft.Json\lib\net20\Newtonsoft.Json.dll - True - True - - - - - - - ..\..\packages\Newtonsoft.Json\lib\net40\Newtonsoft.Json.dll - True - True - - - - - - - ..\..\packages\Newtonsoft.Json\lib\net45\Newtonsoft.Json.dll - True - True - - - - - - - ..\..\packages\Newtonsoft.Json\lib\portable-net45+wp80+win8+wpa81+dnxcore50\Newtonsoft.Json.dll - True - True - - - - - - - ..\..\packages\Newtonsoft.Json\lib\portable-net40+sl5+wp80+win8+wpa81\Newtonsoft.Json.dll - True - True - - - - + + + + + Debug + AnyCPU + {072BA7DA-7B60-407D-8B6E-95E3186BE70C} + Library + Properties + Nest + Nest + v4.5 + 512 + + false + + + true + full + false + ..\Nest\bin\Net45\Debug\ + DEBUG;TRACE + prompt + 4 + BasicCorrectnessRules.ruleset + AnyCPU + ..\Nest\bin\Net45\Debug\Nest.XML + false + 1591,1572,1571,1573,1587,1570 + false + + + pdbonly + True + ..\Nest\bin\Net45\Release\ + TRACE + prompt + 4 + AllRules.ruleset + ..\Nest\bin\Net45\Release\Nest.XML + 1591,1572,1571,1573,1587,1570 + false + + + true + + + ..\..\build\keys\keypair.snk + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + False + .NET Framework 3.5 SP1 Client Profile + false + + + False + .NET Framework 3.5 SP1 + true + + + False + Windows Installer 3.1 + true + + + + + {E97CCF40-0BA6-43FE-9F2D-58D454134088} + Elasticsearch.Net + + + + + + + + + + + + + ..\..\packages\Newtonsoft.Json\lib\net35\Newtonsoft.Json.dll + True + True + + + + + + + ..\..\packages\Newtonsoft.Json\lib\net20\Newtonsoft.Json.dll + True + True + + + + + + + ..\..\packages\Newtonsoft.Json\lib\net40\Newtonsoft.Json.dll + True + True + + + + + + + ..\..\packages\Newtonsoft.Json\lib\net45\Newtonsoft.Json.dll + True + True + + + + + + + ..\..\packages\Newtonsoft.Json\lib\portable-net45+wp80+win8+wpa81+dnxcore50\Newtonsoft.Json.dll + True + True + + + + + + + ..\..\packages\Newtonsoft.Json\lib\portable-net40+sl5+wp80+win8+wpa81\Newtonsoft.Json.dll + True + True + + + + \ No newline at end of file diff --git a/src/Tests/Aggregations/Pipeline/ExtendedStatsBucket/ExtendedStatsBucketAggregationUsageTests.cs b/src/Tests/Aggregations/Pipeline/ExtendedStatsBucket/ExtendedStatsBucketAggregationUsageTests.cs new file mode 100644 index 00000000000..a43eae975a2 --- /dev/null +++ b/src/Tests/Aggregations/Pipeline/ExtendedStatsBucket/ExtendedStatsBucketAggregationUsageTests.cs @@ -0,0 +1,98 @@ +using System; +using FluentAssertions; +using Nest; +using Tests.Framework.Integration; +using Tests.Framework.MockData; + +namespace Tests.Aggregations.Pipeline.ExtendedStatsBucket +{ + public class ExtendedStatsBucketAggregationUsageTests : AggregationUsageTestBase + { + public ExtendedStatsBucketAggregationUsageTests(ReadOnlyCluster cluster, EndpointUsage usage) : base(cluster, usage) { } + + protected override object ExpectJson => new + { + size = 0, + aggs = new + { + projects_started_per_month = new + { + date_histogram = new + { + field = "startedOn", + interval = "month", + }, + aggs = new + { + commits = new + { + sum = new + { + field = "numberOfCommits" + } + } + } + }, + extended_stats_commits_per_month = new + { + extended_stats_bucket = new + { + buckets_path = "projects_started_per_month>commits" + } + } + } + }; + + protected override Func, ISearchRequest> Fluent => s => s + .Size(0) + .Aggregations(a => a + .DateHistogram("projects_started_per_month", dh => dh + .Field(p => p.StartedOn) + .Interval(DateInterval.Month) + .Aggregations(aa => aa + .Sum("commits", sm => sm + .Field(p => p.NumberOfCommits) + ) + ) + ) + .ExtendedStatsBucket("extended_stats_commits_per_month", aaa => aaa + .BucketsPath("projects_started_per_month>commits") + ) + ); + + protected override SearchRequest Initializer => new SearchRequest() + { + Size = 0, + Aggregations = new DateHistogramAggregation("projects_started_per_month") + { + Field = "startedOn", + Interval = DateInterval.Month, + Aggregations = new SumAggregation("commits", "numberOfCommits") + } + && new ExtendedStatsBucketAggregation("extended_stats_commits_per_month", "projects_started_per_month>commits") + }; + + protected override void ExpectResponse(ISearchResponse response) + { + response.IsValid.Should().BeTrue(); + + var projectsPerMonth = response.Aggs.DateHistogram("projects_started_per_month"); + projectsPerMonth.Should().NotBeNull(); + projectsPerMonth.Buckets.Should().NotBeNull(); + projectsPerMonth.Buckets.Count.Should().BeGreaterThan(0); + + var commitsStats = response.Aggs.ExtendedStatsBucket("extended_stats_commits_per_month"); + commitsStats.Should().NotBeNull(); + commitsStats.Average.Should().BeGreaterThan(0); + commitsStats.Max.Should().BeGreaterThan(0); + commitsStats.Min.Should().BeGreaterThan(0); + commitsStats.Count.Should().BeGreaterThan(0); + commitsStats.Sum.Should().BeGreaterThan(0); + commitsStats.SumOfSquares.Should().BeGreaterThan(0); + commitsStats.StdDeviation.Should().BeGreaterThan(0); + commitsStats.StdDeviationBounds.Should().NotBeNull(); + commitsStats.StdDeviationBounds.Upper.Should().BeGreaterThan(0); + commitsStats.StdDeviationBounds.Lower.Should().NotBe(0); + } + } +} diff --git a/src/Tests/Aggregations/Pipeline/PecentilesBucket/PercentilesBucketAggregationUsageTests.cs b/src/Tests/Aggregations/Pipeline/PecentilesBucket/PercentilesBucketAggregationUsageTests.cs new file mode 100644 index 00000000000..9c20302a183 --- /dev/null +++ b/src/Tests/Aggregations/Pipeline/PecentilesBucket/PercentilesBucketAggregationUsageTests.cs @@ -0,0 +1,96 @@ +using System; +using FluentAssertions; +using Nest; +using Tests.Framework.Integration; +using Tests.Framework.MockData; + +namespace Tests.Aggregations.Pipeline.PercentilesBucket +{ + public class PercentilesBucketAggregationUsageTests : AggregationUsageTestBase + { + public PercentilesBucketAggregationUsageTests(ReadOnlyCluster cluster, EndpointUsage usage) : base(cluster, usage) { } + + protected override object ExpectJson => new + { + size = 0, + aggs = new + { + projects_started_per_month = new + { + date_histogram = new + { + field = "startedOn", + interval = "month", + }, + aggs = new + { + commits = new + { + sum = new + { + field = "numberOfCommits" + } + } + } + }, + commits_outlier = new + { + percentiles_bucket = new + { + buckets_path = "projects_started_per_month>commits", + percents = new[] { 95.0, 99.0, 99.9 } + } + } + } + }; + + protected override Func, ISearchRequest> Fluent => s => s + .Size(0) + .Aggregations(a => a + .DateHistogram("projects_started_per_month", dh => dh + .Field(p => p.StartedOn) + .Interval(DateInterval.Month) + .Aggregations(aa => aa + .Sum("commits", sm => sm + .Field(p => p.NumberOfCommits) + ) + ) + ) + .PercentilesBucket("commits_outlier", aaa => aaa + .BucketsPath("projects_started_per_month>commits") + .Percents(95, 99, 99.9) + ) + ); + + protected override SearchRequest Initializer => new SearchRequest() + { + Size = 0, + Aggregations = new DateHistogramAggregation("projects_started_per_month") + { + Field = "startedOn", + Interval = DateInterval.Month, + Aggregations = new SumAggregation("commits", "numberOfCommits") + } + && new PercentilesBucketAggregation("commits_outlier", "projects_started_per_month>commits") + { + Percents = new[] { 95, 99, 99.9 } + } + }; + + protected override void ExpectResponse(ISearchResponse response) + { + response.IsValid.Should().BeTrue(); + + var projectsPerMonth = response.Aggs.DateHistogram("projects_started_per_month"); + projectsPerMonth.Should().NotBeNull(); + projectsPerMonth.Buckets.Should().NotBeNull(); + projectsPerMonth.Buckets.Count.Should().BeGreaterThan(0); + + var commitsOutlier = response.Aggs.PercentilesBucket("commits_outlier"); + commitsOutlier.Should().NotBeNull(); + commitsOutlier.Items.Should().NotBeNullOrEmpty(); + foreach (var item in commitsOutlier.Items) + item.Value.Should().BeGreaterThan(0); + } + } +} diff --git a/src/Tests/Aggregations/Pipeline/StatsBucket/StatsBucketAggregationUsageTests.cs b/src/Tests/Aggregations/Pipeline/StatsBucket/StatsBucketAggregationUsageTests.cs new file mode 100644 index 00000000000..28b9c09da6d --- /dev/null +++ b/src/Tests/Aggregations/Pipeline/StatsBucket/StatsBucketAggregationUsageTests.cs @@ -0,0 +1,93 @@ +using System; +using FluentAssertions; +using Nest; +using Tests.Framework.Integration; +using Tests.Framework.MockData; + +namespace Tests.Aggregations.Pipeline.StatsBucket +{ + public class StatsBucketAggregationUsageTests : AggregationUsageTestBase + { + public StatsBucketAggregationUsageTests(ReadOnlyCluster cluster, EndpointUsage usage) : base(cluster, usage) { } + + protected override object ExpectJson => new + { + size = 0, + aggs = new + { + projects_started_per_month = new + { + date_histogram = new + { + field = "startedOn", + interval = "month", + }, + aggs = new + { + commits = new + { + sum = new + { + field = "numberOfCommits" + } + } + } + }, + stats_commits_per_month = new + { + stats_bucket = new + { + buckets_path = "projects_started_per_month>commits" + } + } + } + }; + + protected override Func, ISearchRequest> Fluent => s => s + .Size(0) + .Aggregations(a => a + .DateHistogram("projects_started_per_month", dh => dh + .Field(p => p.StartedOn) + .Interval(DateInterval.Month) + .Aggregations(aa => aa + .Sum("commits", sm => sm + .Field(p => p.NumberOfCommits) + ) + ) + ) + .StatsBucket("stats_commits_per_month", aaa => aaa + .BucketsPath("projects_started_per_month>commits") + ) + ); + + protected override SearchRequest Initializer => new SearchRequest() + { + Size = 0, + Aggregations = new DateHistogramAggregation("projects_started_per_month") + { + Field = "startedOn", + Interval = DateInterval.Month, + Aggregations = new SumAggregation("commits", "numberOfCommits") + } + && new StatsBucketAggregation("stats_commits_per_month", "projects_started_per_month>commits") + }; + + protected override void ExpectResponse(ISearchResponse response) + { + response.IsValid.Should().BeTrue(); + + var projectsPerMonth = response.Aggs.DateHistogram("projects_started_per_month"); + projectsPerMonth.Should().NotBeNull(); + projectsPerMonth.Buckets.Should().NotBeNull(); + projectsPerMonth.Buckets.Count.Should().BeGreaterThan(0); + + var commitsStats = response.Aggs.StatsBucket("stats_commits_per_month"); + commitsStats.Should().NotBeNull(); + commitsStats.Average.Should().BeGreaterThan(0); + commitsStats.Max.Should().BeGreaterThan(0); + commitsStats.Min.Should().BeGreaterThan(0); + commitsStats.Count.Should().BeGreaterThan(0); + commitsStats.Sum.Should().BeGreaterThan(0); + } + } +} diff --git a/src/Tests/Tests.csproj b/src/Tests/Tests.csproj index 86d4fedb50e..0afa1c24343 100644 --- a/src/Tests/Tests.csproj +++ b/src/Tests/Tests.csproj @@ -1,1319 +1,1322 @@ - - - - - Debug - AnyCPU - {37164C11-88EF-4428-803A-9AA24FB8B44D} - Library - Properties - Tests - Tests - v4.5 - 512 - - false - - - true - full - false - ..\Tests\bin\Net45\Debug\ - DEBUG;TRACE - prompt - 4 - - - pdbonly - true - ..\Tests\bin\Net45\Release\ - TRACE - prompt - 4 - - - - - <__paket__xunit_core_props>win81\xunit.core - - - - - <__paket__xunit_core_props>wpa81\xunit.core - - - - - <__paket__xunit_core_props>portable-net45+win8+wp8+wpa81\xunit.core - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {E97CCF40-0BA6-43FE-9F2D-58D454134088} - Elasticsearch.Net - - - {072ba7da-7b60-407d-8b6e-95e3186be70c} - Nest - - - - - - - - - - - - - - - - - - ..\..\packages\Bogus\lib\net40\Bogus.dll - True - True - - - True - - - - - - - - - ..\..\packages\DiffPlex\lib\portable-net40+sl50+win+wpa81+wp80\DiffPlex.dll - True - True - - - - - - - - - ..\..\packages\FluentAssertions\lib\win81\FluentAssertions.Core.dll - True - True - - - ..\..\packages\FluentAssertions\lib\win81\FluentAssertions.dll - True - True - - - - - - - ..\..\packages\FluentAssertions\lib\net40\FluentAssertions.Core.dll - True - True - - - ..\..\packages\FluentAssertions\lib\net40\FluentAssertions.dll - True - True - - - - - - - ..\..\packages\FluentAssertions\lib\net45\FluentAssertions.Core.dll - True - True - - - ..\..\packages\FluentAssertions\lib\net45\FluentAssertions.dll - True - True - - - - - - - ..\..\packages\FluentAssertions\lib\monoandroid\FluentAssertions.Core.dll - True - True - - - - - - - ..\..\packages\FluentAssertions\lib\monotouch\FluentAssertions.Core.dll - True - True - - - - - - - ..\..\packages\FluentAssertions\lib\sl5\FluentAssertions.Core.dll - True - True - - - ..\..\packages\FluentAssertions\lib\sl5\FluentAssertions.dll - True - True - - - ..\..\packages\FluentAssertions\lib\sl5\Microsoft.VisualStudio.QualityTools.UnitTesting.Silverlight.dll - True - True - - - - - - - ..\..\packages\FluentAssertions\lib\wp8\FluentAssertions.Core.dll - True - True - - - ..\..\packages\FluentAssertions\lib\wp8\FluentAssertions.dll - True - True - - - - - - - ..\..\packages\FluentAssertions\lib\wpa81\FluentAssertions.Core.dll - True - True - - - ..\..\packages\FluentAssertions\lib\wpa81\FluentAssertions.dll - True - True - - - - - - - ..\..\packages\FluentAssertions\lib\xamarin.ios\FluentAssertions.Core.dll - True - True - - - - - - - ..\..\packages\FluentAssertions\lib\portable-win81+wpa81\FluentAssertions.Core.dll - True - True - - - ..\..\packages\FluentAssertions\lib\portable-win81+wpa81\FluentAssertions.dll - True - True - - - - - - - ..\..\packages\FluentAssertions\lib\portable-net40+sl5+win8+wp8+wpa81\FluentAssertions.Core.dll - True - True - - - ..\..\packages\FluentAssertions\lib\portable-net40+sl5+win8+wp8+wpa81\FluentAssertions.dll - True - True - - - - - - - - - ..\..\packages\Newtonsoft.Json\lib\net35\Newtonsoft.Json.dll - True - True - - - - - - - ..\..\packages\Newtonsoft.Json\lib\net20\Newtonsoft.Json.dll - True - True - - - - - - - ..\..\packages\Newtonsoft.Json\lib\net40\Newtonsoft.Json.dll - True - True - - - - - - - ..\..\packages\Newtonsoft.Json\lib\net45\Newtonsoft.Json.dll - True - True - - - - - - - ..\..\packages\Newtonsoft.Json\lib\portable-net45+wp80+win8+wpa81+dnxcore50\Newtonsoft.Json.dll - True - True - - - - - - - ..\..\packages\Newtonsoft.Json\lib\portable-net40+sl5+wp80+win8+wpa81\Newtonsoft.Json.dll - True - True - - - - - - - - - ..\..\packages\Rx-Core\lib\windows8\System.Reactive.Core.dll - True - True - - - - - - - ..\..\packages\Rx-Core\lib\net40\System.Reactive.Core.dll - True - True - - - - - - - ..\..\packages\Rx-Core\lib\net45\System.Reactive.Core.dll - True - True - - - - - - - ..\..\packages\Rx-Core\lib\sl5\System.Reactive.Core.dll - True - True - - - - - - - ..\..\packages\Rx-Core\lib\windowsphone71\System.Reactive.Core.dll - True - True - - - - - - - ..\..\packages\Rx-Core\lib\windowsphone8\System.Reactive.Core.dll - True - True - - - - - - - ..\..\packages\Rx-Core\lib\portable-windows8+net45+wp8\System.Reactive.Core.dll - True - True - - - - - - - ..\..\packages\Rx-Core\lib\portable-win81+wpa81\System.Reactive.Core.dll - True - True - - - - - - - ..\..\packages\Rx-Core\lib\portable-net40+sl5+win8+wp8\System.Reactive.Core.dll - True - True - - - - - - - ..\..\packages\Rx-Core\lib\portable-net45+winrt45+wp8+wpa81\System.Reactive.Core.dll - True - True - - - - - - - - - ..\..\packages\Rx-Interfaces\lib\windows8\System.Reactive.Interfaces.dll - True - True - - - - - - - ..\..\packages\Rx-Interfaces\lib\net40\System.Reactive.Interfaces.dll - True - True - - - - - - - ..\..\packages\Rx-Interfaces\lib\net45\System.Reactive.Interfaces.dll - True - True - - - - - - - ..\..\packages\Rx-Interfaces\lib\sl5\System.Reactive.Interfaces.dll - True - True - - - - - - - ..\..\packages\Rx-Interfaces\lib\windowsphone71\System.Reactive.Interfaces.dll - True - True - - - - - - - ..\..\packages\Rx-Interfaces\lib\windowsphone8\System.Reactive.Interfaces.dll - True - True - - - - - - - ..\..\packages\Rx-Interfaces\lib\portable-windows8+net45+wp8\System.Reactive.Interfaces.dll - True - True - - - - - - - ..\..\packages\Rx-Interfaces\lib\portable-win81+wpa81\System.Reactive.Interfaces.dll - True - True - - - - - - - ..\..\packages\Rx-Interfaces\lib\portable-net40+sl5+win8+wp8\System.Reactive.Interfaces.dll - True - True - - - - - - - ..\..\packages\Rx-Interfaces\lib\portable-net45+winrt45+wp8+wpa81\System.Reactive.Interfaces.dll - True - True - - - - - - - - - ..\..\packages\Rx-Linq\lib\windows8\System.Reactive.Linq.dll - True - True - - - - - - - ..\..\packages\Rx-Linq\lib\net40\System.Reactive.Linq.dll - True - True - - - - - - - ..\..\packages\Rx-Linq\lib\net45\System.Reactive.Linq.dll - True - True - - - - - - - ..\..\packages\Rx-Linq\lib\sl5\System.Reactive.Linq.dll - True - True - - - - - - - ..\..\packages\Rx-Linq\lib\windowsphone71\System.Reactive.Linq.dll - True - True - - - - - - - ..\..\packages\Rx-Linq\lib\windowsphone8\System.Reactive.Linq.dll - True - True - - - - - - - ..\..\packages\Rx-Linq\lib\portable-windows8+net45+wp8\System.Reactive.Linq.dll - True - True - - - - - - - ..\..\packages\Rx-Linq\lib\portable-win81+wpa81\System.Reactive.Linq.dll - True - True - - - - - - - ..\..\packages\Rx-Linq\lib\portable-net40+sl5+win8+wp8\System.Reactive.Linq.dll - True - True - - - - - - - ..\..\packages\Rx-Linq\lib\portable-net45+winrt45+wp8+wpa81\System.Reactive.Linq.dll - True - True - - - - - - - - - ..\..\packages\Rx-PlatformServices\lib\windows8\System.Reactive.PlatformServices.dll - True - True - - - - - - - ..\..\packages\Rx-PlatformServices\lib\net40\System.Reactive.PlatformServices.dll - True - True - - - - - - - ..\..\packages\Rx-PlatformServices\lib\net45\System.Reactive.PlatformServices.dll - True - True - - - - - - - ..\..\packages\Rx-PlatformServices\lib\sl5\System.Reactive.PlatformServices.dll - True - True - - - - - - - ..\..\packages\Rx-PlatformServices\lib\windowsphone71\System.Reactive.PlatformServices.dll - True - True - - - - - - - ..\..\packages\Rx-PlatformServices\lib\windowsphone8\System.Reactive.PlatformServices.dll - True - True - - - - - - - ..\..\packages\Rx-PlatformServices\lib\portable-windows8+net45+wp8\System.Reactive.PlatformServices.dll - True - True - - - - - - - ..\..\packages\Rx-PlatformServices\lib\portable-win81+wpa81\System.Reactive.PlatformServices.dll - True - True - - - - - - - ..\..\packages\Rx-PlatformServices\lib\portable-net40+sl5+win8+wp8\System.Reactive.PlatformServices.dll - True - True - - - - - - - ..\..\packages\Rx-PlatformServices\lib\portable-net45+winrt45+wp8+wpa81\System.Reactive.PlatformServices.dll - True - True - - - - - - - - - ..\..\packages\xunit.abstractions\lib\net35\xunit.abstractions.dll - True - True - - - - - - - ..\..\packages\xunit.abstractions\lib\portable-net45+win+wpa81+wp80+monotouch+monoandroid+Xamarin.iOS\xunit.abstractions.dll - True - True - - - - - - - - - ..\..\packages\xunit.assert\lib\portable-net45+win8+wp8+wpa81\xunit.assert.dll - True - True - - - - - - - - - ..\..\packages\xunit.extensibility.core\lib\portable-net45+win8+wp8+wpa81\xunit.core.dll - True - True - - - - - - - - - ..\..\packages\xunit.extensibility.execution\lib\win8\xunit.execution.dotnet.dll - True - True - - - - - - - ..\..\packages\xunit.extensibility.execution\lib\net45\xunit.execution.desktop.dll - True - True - - - - - - - ..\..\packages\xunit.extensibility.execution\lib\monoandroid\xunit.execution.dotnet.dll - True - True - - - - - - - ..\..\packages\xunit.extensibility.execution\lib\monotouch\xunit.execution.dotnet.dll - True - True - - - - - - - ..\..\packages\xunit.extensibility.execution\lib\wp8\xunit.execution.dotnet.dll - True - True - - - - - - - ..\..\packages\xunit.extensibility.execution\lib\wpa81\xunit.execution.dotnet.dll - True - True - - - - - - - ..\..\packages\xunit.extensibility.execution\lib\xamarinios\xunit.execution.dotnet.dll - True - True - - - - - - - ..\..\packages\xunit.extensibility.execution\lib\portable-net45+win8+wp8+wpa81\xunit.execution.dotnet.dll - True - True - - - - + + + + + Debug + AnyCPU + {37164C11-88EF-4428-803A-9AA24FB8B44D} + Library + Properties + Tests + Tests + v4.5 + 512 + + false + + + true + full + false + ..\Tests\bin\Net45\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + ..\Tests\bin\Net45\Release\ + TRACE + prompt + 4 + + + + + <__paket__xunit_core_props>win81\xunit.core + + + + + <__paket__xunit_core_props>wpa81\xunit.core + + + + + <__paket__xunit_core_props>portable-net45+win8+wp8+wpa81\xunit.core + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {E97CCF40-0BA6-43FE-9F2D-58D454134088} + Elasticsearch.Net + + + {072ba7da-7b60-407d-8b6e-95e3186be70c} + Nest + + + + + + + + + + + + + + + + + + + ..\..\packages\Bogus\lib\net40\Bogus.dll + True + True + + + True + + + + + + + + + ..\..\packages\DiffPlex\lib\portable-net40+sl50+win+wpa81+wp80\DiffPlex.dll + True + True + + + + + + + + + ..\..\packages\FluentAssertions\lib\win81\FluentAssertions.Core.dll + True + True + + + ..\..\packages\FluentAssertions\lib\win81\FluentAssertions.dll + True + True + + + + + + + ..\..\packages\FluentAssertions\lib\net40\FluentAssertions.Core.dll + True + True + + + ..\..\packages\FluentAssertions\lib\net40\FluentAssertions.dll + True + True + + + + + + + ..\..\packages\FluentAssertions\lib\net45\FluentAssertions.Core.dll + True + True + + + ..\..\packages\FluentAssertions\lib\net45\FluentAssertions.dll + True + True + + + + + + + ..\..\packages\FluentAssertions\lib\monoandroid\FluentAssertions.Core.dll + True + True + + + + + + + ..\..\packages\FluentAssertions\lib\monotouch\FluentAssertions.Core.dll + True + True + + + + + + + ..\..\packages\FluentAssertions\lib\sl5\FluentAssertions.Core.dll + True + True + + + ..\..\packages\FluentAssertions\lib\sl5\FluentAssertions.dll + True + True + + + ..\..\packages\FluentAssertions\lib\sl5\Microsoft.VisualStudio.QualityTools.UnitTesting.Silverlight.dll + True + True + + + + + + + ..\..\packages\FluentAssertions\lib\wp8\FluentAssertions.Core.dll + True + True + + + ..\..\packages\FluentAssertions\lib\wp8\FluentAssertions.dll + True + True + + + + + + + ..\..\packages\FluentAssertions\lib\wpa81\FluentAssertions.Core.dll + True + True + + + ..\..\packages\FluentAssertions\lib\wpa81\FluentAssertions.dll + True + True + + + + + + + ..\..\packages\FluentAssertions\lib\xamarin.ios\FluentAssertions.Core.dll + True + True + + + + + + + ..\..\packages\FluentAssertions\lib\portable-win81+wpa81\FluentAssertions.Core.dll + True + True + + + ..\..\packages\FluentAssertions\lib\portable-win81+wpa81\FluentAssertions.dll + True + True + + + + + + + ..\..\packages\FluentAssertions\lib\portable-net40+sl5+win8+wp8+wpa81\FluentAssertions.Core.dll + True + True + + + ..\..\packages\FluentAssertions\lib\portable-net40+sl5+win8+wp8+wpa81\FluentAssertions.dll + True + True + + + + + + + + + ..\..\packages\Newtonsoft.Json\lib\net35\Newtonsoft.Json.dll + True + True + + + + + + + ..\..\packages\Newtonsoft.Json\lib\net20\Newtonsoft.Json.dll + True + True + + + + + + + ..\..\packages\Newtonsoft.Json\lib\net40\Newtonsoft.Json.dll + True + True + + + + + + + ..\..\packages\Newtonsoft.Json\lib\net45\Newtonsoft.Json.dll + True + True + + + + + + + ..\..\packages\Newtonsoft.Json\lib\portable-net45+wp80+win8+wpa81+dnxcore50\Newtonsoft.Json.dll + True + True + + + + + + + ..\..\packages\Newtonsoft.Json\lib\portable-net40+sl5+wp80+win8+wpa81\Newtonsoft.Json.dll + True + True + + + + + + + + + ..\..\packages\Rx-Core\lib\windows8\System.Reactive.Core.dll + True + True + + + + + + + ..\..\packages\Rx-Core\lib\net40\System.Reactive.Core.dll + True + True + + + + + + + ..\..\packages\Rx-Core\lib\net45\System.Reactive.Core.dll + True + True + + + + + + + ..\..\packages\Rx-Core\lib\sl5\System.Reactive.Core.dll + True + True + + + + + + + ..\..\packages\Rx-Core\lib\windowsphone71\System.Reactive.Core.dll + True + True + + + + + + + ..\..\packages\Rx-Core\lib\windowsphone8\System.Reactive.Core.dll + True + True + + + + + + + ..\..\packages\Rx-Core\lib\portable-windows8+net45+wp8\System.Reactive.Core.dll + True + True + + + + + + + ..\..\packages\Rx-Core\lib\portable-win81+wpa81\System.Reactive.Core.dll + True + True + + + + + + + ..\..\packages\Rx-Core\lib\portable-net40+sl5+win8+wp8\System.Reactive.Core.dll + True + True + + + + + + + ..\..\packages\Rx-Core\lib\portable-net45+winrt45+wp8+wpa81\System.Reactive.Core.dll + True + True + + + + + + + + + ..\..\packages\Rx-Interfaces\lib\windows8\System.Reactive.Interfaces.dll + True + True + + + + + + + ..\..\packages\Rx-Interfaces\lib\net40\System.Reactive.Interfaces.dll + True + True + + + + + + + ..\..\packages\Rx-Interfaces\lib\net45\System.Reactive.Interfaces.dll + True + True + + + + + + + ..\..\packages\Rx-Interfaces\lib\sl5\System.Reactive.Interfaces.dll + True + True + + + + + + + ..\..\packages\Rx-Interfaces\lib\windowsphone71\System.Reactive.Interfaces.dll + True + True + + + + + + + ..\..\packages\Rx-Interfaces\lib\windowsphone8\System.Reactive.Interfaces.dll + True + True + + + + + + + ..\..\packages\Rx-Interfaces\lib\portable-windows8+net45+wp8\System.Reactive.Interfaces.dll + True + True + + + + + + + ..\..\packages\Rx-Interfaces\lib\portable-win81+wpa81\System.Reactive.Interfaces.dll + True + True + + + + + + + ..\..\packages\Rx-Interfaces\lib\portable-net40+sl5+win8+wp8\System.Reactive.Interfaces.dll + True + True + + + + + + + ..\..\packages\Rx-Interfaces\lib\portable-net45+winrt45+wp8+wpa81\System.Reactive.Interfaces.dll + True + True + + + + + + + + + ..\..\packages\Rx-Linq\lib\windows8\System.Reactive.Linq.dll + True + True + + + + + + + ..\..\packages\Rx-Linq\lib\net40\System.Reactive.Linq.dll + True + True + + + + + + + ..\..\packages\Rx-Linq\lib\net45\System.Reactive.Linq.dll + True + True + + + + + + + ..\..\packages\Rx-Linq\lib\sl5\System.Reactive.Linq.dll + True + True + + + + + + + ..\..\packages\Rx-Linq\lib\windowsphone71\System.Reactive.Linq.dll + True + True + + + + + + + ..\..\packages\Rx-Linq\lib\windowsphone8\System.Reactive.Linq.dll + True + True + + + + + + + ..\..\packages\Rx-Linq\lib\portable-windows8+net45+wp8\System.Reactive.Linq.dll + True + True + + + + + + + ..\..\packages\Rx-Linq\lib\portable-win81+wpa81\System.Reactive.Linq.dll + True + True + + + + + + + ..\..\packages\Rx-Linq\lib\portable-net40+sl5+win8+wp8\System.Reactive.Linq.dll + True + True + + + + + + + ..\..\packages\Rx-Linq\lib\portable-net45+winrt45+wp8+wpa81\System.Reactive.Linq.dll + True + True + + + + + + + + + ..\..\packages\Rx-PlatformServices\lib\windows8\System.Reactive.PlatformServices.dll + True + True + + + + + + + ..\..\packages\Rx-PlatformServices\lib\net40\System.Reactive.PlatformServices.dll + True + True + + + + + + + ..\..\packages\Rx-PlatformServices\lib\net45\System.Reactive.PlatformServices.dll + True + True + + + + + + + ..\..\packages\Rx-PlatformServices\lib\sl5\System.Reactive.PlatformServices.dll + True + True + + + + + + + ..\..\packages\Rx-PlatformServices\lib\windowsphone71\System.Reactive.PlatformServices.dll + True + True + + + + + + + ..\..\packages\Rx-PlatformServices\lib\windowsphone8\System.Reactive.PlatformServices.dll + True + True + + + + + + + ..\..\packages\Rx-PlatformServices\lib\portable-windows8+net45+wp8\System.Reactive.PlatformServices.dll + True + True + + + + + + + ..\..\packages\Rx-PlatformServices\lib\portable-win81+wpa81\System.Reactive.PlatformServices.dll + True + True + + + + + + + ..\..\packages\Rx-PlatformServices\lib\portable-net40+sl5+win8+wp8\System.Reactive.PlatformServices.dll + True + True + + + + + + + ..\..\packages\Rx-PlatformServices\lib\portable-net45+winrt45+wp8+wpa81\System.Reactive.PlatformServices.dll + True + True + + + + + + + + + ..\..\packages\xunit.abstractions\lib\net35\xunit.abstractions.dll + True + True + + + + + + + ..\..\packages\xunit.abstractions\lib\portable-net45+win+wpa81+wp80+monotouch+monoandroid+Xamarin.iOS\xunit.abstractions.dll + True + True + + + + + + + + + ..\..\packages\xunit.assert\lib\portable-net45+win8+wp8+wpa81\xunit.assert.dll + True + True + + + + + + + + + ..\..\packages\xunit.extensibility.core\lib\portable-net45+win8+wp8+wpa81\xunit.core.dll + True + True + + + + + + + + + ..\..\packages\xunit.extensibility.execution\lib\win8\xunit.execution.dotnet.dll + True + True + + + + + + + ..\..\packages\xunit.extensibility.execution\lib\net45\xunit.execution.desktop.dll + True + True + + + + + + + ..\..\packages\xunit.extensibility.execution\lib\monoandroid\xunit.execution.dotnet.dll + True + True + + + + + + + ..\..\packages\xunit.extensibility.execution\lib\monotouch\xunit.execution.dotnet.dll + True + True + + + + + + + ..\..\packages\xunit.extensibility.execution\lib\wp8\xunit.execution.dotnet.dll + True + True + + + + + + + ..\..\packages\xunit.extensibility.execution\lib\wpa81\xunit.execution.dotnet.dll + True + True + + + + + + + ..\..\packages\xunit.extensibility.execution\lib\xamarinios\xunit.execution.dotnet.dll + True + True + + + + + + + ..\..\packages\xunit.extensibility.execution\lib\portable-net45+win8+wp8+wpa81\xunit.execution.dotnet.dll + True + True + + + + \ No newline at end of file