public void IndependVariable()
 {
     IVariable<int> x = new Variable<int>("x") { Values = { 10 } };
     IVariable s =  new ConvertedVariable<string,string, int>(x,x,Convert.ToInt32,Convert.ToString);
     
     Assert.AreEqual("10", s.Values[0]);
     s.Values[0] = "20";
     Assert.AreEqual(20,x.Values[0]);
     x.Values.Add(3);
     Assert.AreEqual(2,s.Values.Count);
 }
        public void DependendVariable()
        {
            IVariable<int> x = new Variable<int>("x");
            IVariable<int> y= new Variable<int>("y");
            y.Arguments.Add(x);

            IVariable<int> convertedY = new ConvertedVariable<int, string, int>(y, x, Convert.ToInt32, Convert.ToString);

            convertedY["20"] = 20;
            Assert.AreEqual(20, y[20]);
        }
        public void DependendVariable()
        {
            IVariable <int> x = new Variable <int>("x");
            IVariable <int> y = new Variable <int>("y");

            y.Arguments.Add(x);

            IVariable <int> convertedY = new ConvertedVariable <int, string, int>(y, x, Convert.ToInt32, Convert.ToString);

            convertedY["20"] = 20;
            Assert.AreEqual(20, y[20]);
        }
        public void IndependVariable()
        {
            IVariable<int> x = new Variable<int>("x") { Values = { 10 } };
            IVariable s = new ConvertedVariable<string, string, int>(x, x, Convert.ToInt32, Convert.ToString);
            
            Assert.AreEqual("10", s.Values[0]);
            s.Values[0] = "20";
            Assert.AreEqual(20, x.Values[0]);
            x.Values.Add(3);
            Assert.AreEqual(2, s.Values.Count);

            //convert it back to int does not because the converted variable loses type :(
            //IVariable intVariable = new ConvertedVariable<int, string>(s, (IVariable<string>) s, Convert.ToString, Convert.ToInt32);
        }
        public void IndependVariable()
        {
            IVariable <int> x = new Variable <int>("x")
            {
                Values = { 10 }
            };
            IVariable s = new ConvertedVariable <string, string, int>(x, x, Convert.ToInt32, Convert.ToString);

            Assert.AreEqual("10", s.Values[0]);
            s.Values[0] = "20";
            Assert.AreEqual(20, x.Values[0]);
            x.Values.Add(3);
            Assert.AreEqual(2, s.Values.Count);
        }
        public void IndependVariable()
        {
            IVariable <int> x = new Variable <int>("x")
            {
                Values = { 10 }
            };
            IVariable s = new ConvertedVariable <string, string, int>(x, x, Convert.ToInt32, Convert.ToString);

            Assert.AreEqual("10", s.Values[0]);
            s.Values[0] = "20";
            Assert.AreEqual(20, x.Values[0]);
            x.Values.Add(3);
            Assert.AreEqual(2, s.Values.Count);

            //convert it back to int does not because the converted variable loses type :(
            //IVariable intVariable = new ConvertedVariable<int, string>(s, (IVariable<string>) s, Convert.ToString, Convert.ToInt32);
        }
        public void ConvertTwice()
        {
            //source==>strings==>ints
            IVariable<int> source = new Variable<int>();
            IVariable<string> strings = new ConvertedVariable<string, string, int>(source, source, Convert.ToInt32,
                                                                                   Convert.ToString);
            IVariable<int> ints = new ConvertedVariable<int, int, string>(strings, strings, Convert.ToString,
                                                                          Convert.ToInt32);
            ints.Values.Add(1);
            //assert all variables are updated.
            Assert.AreEqual(1,source.Values[0]);
            Assert.AreEqual("1", strings.Values[0]);
            Assert.AreEqual(1, ints.Values[0]);

            //this also works when adding to source
            source.Values.Add(2);
            Assert.AreEqual(2, source.Values[1]);
            Assert.AreEqual("2", strings.Values[1]);
            Assert.AreEqual(2, ints.Values[1]);
        }
        public void ConvertTwice()
        {
            //source==>strings==>ints
            IVariable <int>    source  = new Variable <int>();
            IVariable <string> strings = new ConvertedVariable <string, string, int>(source, source, Convert.ToInt32,
                                                                                     Convert.ToString);
            IVariable <int> ints = new ConvertedVariable <int, int, string>(strings, strings, Convert.ToString,
                                                                            Convert.ToInt32);

            ints.Values.Add(1);
            //assert all variables are updated.
            Assert.AreEqual(1, source.Values[0]);
            Assert.AreEqual("1", strings.Values[0]);
            Assert.AreEqual(1, ints.Values[0]);

            //this also works when adding to source
            source.Values.Add(2);
            Assert.AreEqual(2, source.Values[1]);
            Assert.AreEqual("2", strings.Values[1]);
            Assert.AreEqual(2, ints.Values[1]);
        }