private static IReadOnlyCollection <AssertionTracker> BuildAssertionTrackersWithActionsInMustableState(
            Type subjectType = null,
            SubjectValueNullOption subjectValueNullOption = SubjectValueNullOption.CanBeNull,
            AssertionKind?assertionKind = null)
        {
            var result = BuildAssertionTrackersWithAllCombinationsOfFlags(subjectType, subjectValueNullOption, assertionKind)
                         .Where(_ => _.Actions.HasFlag(Actions.Categorized))
                         .Where(_ => !_.Actions.HasFlag(Actions.Musted))
                         .Where(_ => !_.Actions.HasFlag(Actions.Eached))
                         .Where(_ => !_.Actions.HasFlag(Actions.VerifiedAtLeastOnce))
                         .ToList();

            return(result);
        }
        private static IReadOnlyCollection <AssertionTracker> BuildAssertionTrackersWithAllCombinationsOfFlags(
            Type subjectType = null,
            SubjectValueNullOption subjectValueNullOption = SubjectValueNullOption.CanBeNull,
            AssertionKind?assertionKind = null)
        {
            if (subjectType == null)
            {
                subjectType = typeof(object);
            }

            var result = EnumExtensions.GetAllPossibleEnumValues <Actions>().Select(
                _ =>
            {
                object subjectValue;
                switch (subjectValueNullOption)
                {
                case SubjectValueNullOption.CannotBeNull:
                    subjectValue = AD.ummy(subjectType);
                    break;

                case SubjectValueNullOption.MustBeNull:
                    subjectValue = null;
                    break;

                case SubjectValueNullOption.CanBeNull:
                    subjectValue = ThreadSafeRandom.Next(0, 2) == 0 ? AD.ummy(subjectType) : null;
                    break;

                default:
                    throw new NotSupportedException("this is not supported: " + subjectValueNullOption);
                }

                return(new AssertionTracker
                {
                    SubjectValue = subjectValue,
                    SubjectType = subjectType,
                    SubjectName = ThreadSafeRandom.Next(0, 2) == 0 ? A.Dummy <string>() : null,
                    Actions = _,
                    AssertionKind = assertionKind ?? A.Dummy <AssertionKind>(),
                });
            })
                         .ToList();

            return(result);
        }