示例#1
0
        static bool ListDiff <T>(ModelDiffContext context, List <T> lhs, List <T> rhs, Func <ModelDiffContext, T, T, bool> pred, Func <T, int> order = null)
        {
            var equals = true;

            if (lhs.Count != rhs.Count)
            {
                equals = false;
                context.List.Add(new ModelDiff
                {
                    Context = context.Path,
                    Message = $"{lhs.Count} != {rhs.Count}",
                });
            }

            var l = order != null?lhs.OrderBy(order).GetEnumerator() : lhs.GetEnumerator();

            var r = order != null?rhs.OrderBy(order).GetEnumerator() : rhs.GetEnumerator();

            for (int i = 0; i < lhs.Count; ++i)
            {
                l.MoveNext();
                r.MoveNext();
                if (!pred(context.Enter($"{i}"), l.Current, r.Current))
                {
                    equals = false;
                }
            }
            return(equals);
        }
示例#2
0
        static bool TextureEquals(ModelDiffContext context, Texture lhs, Texture rhs)
        {
            if (!context.RequireComapre(lhs, rhs, out bool equals))
            {
                if (!equals)
                {
                    return(false);
                }
                return(true);
            }

            equals = true;
            if (!context.Enter("Name").Push(lhs.Name, rhs.Name, StringEquals))
            {
                equals = false;
            }
            if (!context.Enter("MagFilter").Push(lhs.Sampler.MagFilter, rhs.Sampler.MagFilter))
            {
                equals = false;
            }
            if (!context.Enter("MinFilter").Push(lhs.Sampler.MinFilter, rhs.Sampler.MinFilter))
            {
                equals = false;
            }
            if (!context.Enter("WrapS").Push(lhs.Sampler.WrapS, rhs.Sampler.WrapS))
            {
                equals = false;
            }
            if (!context.Enter("WrapT").Push(lhs.Sampler.WrapT, rhs.Sampler.WrapT))
            {
                equals = false;
            }
            if (lhs is ImageTexture l && rhs is ImageTexture r)
            {
                if (!ImageBytesEquals(context, l.Image, r.Image))
                {
                    equals = false;
                }
                return(equals);
            }
示例#3
0
        static bool TextureInfoEquals(ModelDiffContext context, TextureInfo lhs, TextureInfo rhs)
        {
            if (!context.RequireComapre(lhs, rhs, out bool equals))
            {
                return(equals);
            }

            if (lhs.Offset != rhs.Offset)
            {
                return(false);
            }
            if (lhs.Scaling != rhs.Scaling)
            {
                return(false);
            }
            return(TextureEquals(context.Enter("Texture"), lhs.Texture, rhs.Texture));
        }
示例#4
0
 static void Image(ModelDiffContext context, Image lhs, Image rhs)
 {
     context.Enter($"{lhs.Name}:{rhs.Name}").Push(lhs, rhs, ImageBytesEquals);
 }