internal static bool Subset()

in src/PSRule/Definitions/Expressions/LanguageExpressions.cs [610:633]


        internal static bool Subset(ExpressionContext context, ExpressionInfo info, object[] args, object o)
        {
            var properties = GetProperties(args);
            if (TryPropertyArray(properties, SUBSET, out var expectedValue) && TryField(properties, out var field) &&
                GetCaseSensitive(properties, out var caseSensitive) && GetUnique(properties, out var unique))
            {
                context.ExpressionTrace(SUBSET, field, expectedValue);
                if (!ObjectHelper.GetPath(context, o, field, caseSensitive: false, out object actualValue))
                    return NotHasField(context, field);

                if (!ExpressionHelpers.TryEnumerableLength(actualValue, out _))
                    return Fail(context, ReasonStrings.NotEnumerable, field);

                for (var i = 0; expectedValue != null && i < expectedValue.Length; i++)
                {
                    if (!ExpressionHelpers.CountValue(actualValue, expectedValue.GetValue(i), caseSensitive, out var count) || (count > 1 && unique))
                        return count == 0
                            ? Fail(context, ReasonStrings.Subset, field, expectedValue.GetValue(i))
                            : Fail(context, ReasonStrings.SubsetDuplicate, field, expectedValue.GetValue(i));
                }
                return Pass();
            }
            return Invalid(context, SUBSET);
        }