public async Task ObjectWithAsyncDict()
        {
            var dict = new AsyncDictThatBlowsUp();
            var arr  = new { dict = dict };
            var obj  = (IBifoqlMapInternal)arr.ToBifoqlObject();

            Assert.Equal(1, obj.Count);

            var first = await obj["dict"]();

            Assert.Same(dict, first);
        }
        public async Task ListWithAsyncDict()
        {
            var dict = new AsyncDictThatBlowsUp();
            var arr  = new object[] { dict };
            var obj  = (IBifoqlArrayInternal)arr.ToBifoqlObject();

            Assert.Equal(1, obj.Count);

            var first = await obj[0]();

            Assert.Same(dict, first);
        }
        public async Task NestedAnonymousObject()
        {
            var dict = new AsyncDictThatBlowsUp();
            var anon = new {
                foo = new { bar = dict }
            };

            var obj = (IBifoqlMapInternal)anon.ToBifoqlObject();

            var foo = (IBifoqlMapInternal)(await obj["foo"]());
            var bar = await foo["bar"]();

            Assert.Same(dict, bar);
        }
        public async Task NestedDict()
        {
            var dict = new AsyncDictThatBlowsUp();
            var anon = new Dictionary <string, object> {
                ["foo"] = (new Dictionary <string, object> {
                    ["bar"] = dict
                })
            };

            var obj = (IBifoqlMapInternal)anon.ToBifoqlObject();

            var foo = (IBifoqlMapInternal)(await obj["foo"]());
            var bar = await foo["bar"]();

            Assert.Same(dict, bar);
        }