public void TestCommandSingleHash()
        {
            var expect = new NovaDictionary(new Dictionary <object, object> {
                { "hello", "world" }
            });
            var real = CompileAndExecute("def func(h) { return h; }; func('hello' => 'world');");

            Assert.That(real, Is.EqualTo(expect));
        }
        private dynamic ConvertElements(NovaDictionary res)
        {
            List <dynamic> keysToRemove = new List <object>();

            keysToRemove.AddRange(res.Keys.OfType <NovaString>());
            keysToRemove.ForEach(o =>
            {
                string s = o;
                var val  = res[o];
                res.Remove(o);
                res[s] = val;
            });

            keysToRemove.Clear();

            keysToRemove.AddRange(
                res.Keys.Where(
                    key =>
                    res[key] is NovaString || res[key] is NovaNumber || res[key] is NovaArray ||
                    res[key] is NovaDictionary));

            keysToRemove.ForEach(o =>
            {
                if (res[o] is NovaString)
                {
                    string s = res[o];
                    res[o]   = s;
                }
                else if (res[o] is NovaNumber)
                {
                    res[o] = NovaNumber.Convert(res[o]);
                }
                else if (res[o] is NovaArray)
                {
                    res[o] = ConvertElements((NovaArray)res[o]);
                }
                else if (res[o] is NovaDictionary)
                {
                    res[o] = ConvertElements((NovaDictionary)res[o]);
                }
            });

            return(res);
        }