public void ConstantsNotRelevant()
        {
            var data = new int[] { 1, 3, 5, 6 };

            var query1 = from entry in data.AsQueryable() where entry % 2 == 0 select entry * 4;
            var query2 = from entry in data.AsQueryable() where entry % 3 == 2 select entry * 7;
            var hash1  = ExpressionTreeStructureHasher.ComputeHash(query1.Expression);
            var hash2  = ExpressionTreeStructureHasher.ComputeHash(query2.Expression);

            Assert.Equal(hash1, hash2);
        }
        public void DifferentQueryDifferetHash()
        {
            var data = new int[] { 1, 3, 5, 6 };

            var query1 = from entry in data.AsQueryable() where entry % 2 == 0 select entry * 4;
            var query2 = from entry in data.AsQueryable() where entry == 3 select entry * 4;
            var hash1  = ExpressionTreeStructureHasher.ComputeHash(query1.Expression);
            var hash2  = ExpressionTreeStructureHasher.ComputeHash(query2.Expression);

            Assert.NotEqual(hash1, hash2);
        }
        public void ParameterValuesNotRelevant()
        {
            var data = new int[] { 1, 3, 5, 6 };

            int mod    = 2;
            var query1 = from entry in data.AsQueryable() where entry % mod == 0 select entry * 4;

            mod = 3;
            var query2 = from entry in data.AsQueryable() where entry % mod == 0 select entry * 4;
            var hash1  = ExpressionTreeStructureHasher.ComputeHash(query1.Expression);
            var hash2  = ExpressionTreeStructureHasher.ComputeHash(query2.Expression);

            Assert.Equal(hash1, hash2);
        }