/// <summary>
        ///     Test whether the collection is ordered
        /// </summary>
        /// <param name="actual"></param>
        /// <returns></returns>
        protected override bool doMatch(IEnumerable actual)
        {
            object previous = null;
            int    index    = 0;

            foreach (var obj in actual)
            {
                object objToCompare = obj;
                if (obj == null)
                {
                    throw new ArgumentNullException("actual", "Null value at index " + index.ToString());
                }

                if (propertyName != null)
                {
                    PropertyInfo prop = obj.GetType().GetProperty(propertyName);
                    objToCompare = prop.GetValue(obj, null);
                    if (objToCompare == null)
                    {
                        throw new ArgumentNullException("actual", "Null property value at index " + index.ToString());
                    }
                }

                if (previous != null)
                {
                    //int comparisonResult = comparer.Compare(al[i], al[i + 1]);
                    int comparisonResult = comparer.Compare(previous, objToCompare);

                    if (descending && comparisonResult < 0)
                    {
                        return(false);
                    }
                    if (!descending && comparisonResult > 0)
                    {
                        return(false);
                    }
                }

                previous = objToCompare;
                index++;
            }

            return(true);
        }