public LdClientBigSegmentsTest(ITestOutputHelper testOutput) : base(testOutput)
        {
            _testData = TestData.DataSource();

            _user       = User.WithKey("userkey");
            _bigSegment = new SegmentBuilder("segmentkey")
                          .Unbounded(true)
                          .Generation(1)
                          .Build();
            _flag = new FeatureFlagBuilder("flagkey")
                    .On(true)
                    .Variations(LdValue.Of(false), LdValue.Of(true))
                    .FallthroughVariation(0)
                    .Rules(
                new RuleBuilder().Variation(1).Clauses(
                    ClauseBuilder.ShouldMatchSegment(_bigSegment.Key)
                    ).Build()
                )
                    .Build();
            _testData.UsePreconfiguredFlag(_flag);
            _testData.UsePreconfiguredSegment(_bigSegment);

            _storeMock    = new MockBigSegmentStore();
            _storeFactory = _storeMock.AsSingletonFactory();
            _storeMock.SetupMetadataReturns(new StoreMetadata {
                LastUpToDate = UnixMillisecondTime.Now
            });
        }
        public void BigSegmentStateIsQueriedOnlyOncePerUserEvenIfFlagReferencesMultipleSegments()
        {
            var segment1    = new SegmentBuilder("segmentkey1").Unbounded(true).Generation(2).Build();
            var segment2    = new SegmentBuilder("segmentkey2").Unbounded(true).Generation(3).Build();
            var bigSegments = new MockBigSegmentProvider();
            var membership  = MockMembership.New().Include(segment2);

            bigSegments.Membership[baseUser.Key] = membership;
            var flag = new FeatureFlagBuilder("key").On(true)
                       .Variations(LdValue.Of(false), LdValue.Of(true))
                       .FallthroughVariation(0)
                       .Rules(
                new RuleBuilder().Variation(1).Clauses(ClauseBuilder.ShouldMatchSegment(segment1.Key)).Build(),
                new RuleBuilder().Variation(1).Clauses(ClauseBuilder.ShouldMatchSegment(segment2.Key)).Build()
                )
                       .Build();
            var evaluator = BasicEvaluator.WithStoredSegments(segment1, segment2).WithBigSegments(bigSegments);

            var result = evaluator.Evaluate(flag, baseUser, EventFactory.Default);

            Assert.Equal(LdValue.Of(true), result.Result.Value);
            Assert.Equal(BigSegmentsStatus.Healthy, result.Result.Reason.BigSegmentsStatus);

            Assert.Equal(1, bigSegments.MembershipQueryCount);
            Assert.Equal(new List <string> {
                MakeBigSegmentRef(segment1), MakeBigSegmentRef(segment2)
            },
                         membership.Queries);
        }