public void PerformanceTest()
        {
            AdvancedComparerStruct <Xtensive.Tuples.Tuple> comparer = AdvancedComparerStruct <Xtensive.Tuples.Tuple> .Default;

            Xtensive.Tuples.Tuple t   = Xtensive.Tuples.Tuple.Create(1, 2);
            Xtensive.Tuples.Tuple ct  = t.ToRegular();
            Xtensive.Tuples.Tuple wt  = t.ToReadOnly(TupleTransformType.TransformedTuple);
            Xtensive.Tuples.Tuple wtc = t.ToReadOnly(TupleTransformType.TransformedTuple);
            int count = IterationCount;

            comparer.Equals(t, ct);
            comparer.Equals(t, wt);
            comparer.Equals(wt, wtc);

            TestHelper.CollectGarbage();
            using (new Measurement("O&O", MeasurementOptions.Log, count))
                for (int i = 0; i < count; i++)
                {
                    comparer.Equals(t, ct);
                }

            TestHelper.CollectGarbage();
            using (new Measurement("O&W", MeasurementOptions.Log, count))
                for (int i = 0; i < count; i++)
                {
                    comparer.Equals(t, wt);
                }

            TestHelper.CollectGarbage();
            using (new Measurement("W&W", MeasurementOptions.Log, count))
                for (int i = 0; i < count; i++)
                {
                    comparer.Equals(wt, wtc);
                }
        }
        public void BaseTest()
        {
            Xtensive.Tuples.Tuple t = Xtensive.Tuples.Tuple.Create(1, "2", 3);
            TestLog.Info("Original: {0}", t);

            Xtensive.Tuples.Tuple rt = t.ToReadOnly(TupleTransformType.TransformedTuple);
            TestLog.Info("Wrapper:  {0}", rt);
            Assert.AreEqual(t, rt);
            t.SetValue(0, 2);
            Assert.AreEqual(t, rt);
            t.SetValue(0, 1);
            AssertEx.Throws <NotSupportedException>(delegate {
                rt.SetValue(0, 2);
            });

            Xtensive.Tuples.Tuple ct = t.ToReadOnly(TupleTransformType.Tuple);
            TestLog.Info("Copy:     {0}", ct);
            Assert.AreEqual(t, ct);
            t.SetValue(0, 2);
            Assert.AreNotEqual(t, ct);
            t.SetValue(0, 1);
            AssertEx.Throws <NotSupportedException>(delegate {
                ct.SetValue(0, 2);
            });
        }