public async Task TestGenericType()
        {
            var awaitablifier = new Awaitablifier();

            // for null
            Assert.AreEqual(null, await awaitablifier.Awaitablify <string>(null).HasResult <string>());

            // for value type
            Assert.AreEqual(1, await awaitablifier.Awaitablify(1).HasResult <int>());

            // for ref type
            Assert.AreEqual("5", await awaitablifier.Awaitablify("5").HasResult <string>());
            Assert.AreEqual("5", await awaitablifier.Awaitablify("5").HasResult <object>());

            // for value result task
            Assert.AreEqual(1, await awaitablifier.Awaitablify(Task.Run(() => 1)).HasResult <int>());

            // for ref type result task
            Assert.AreEqual("5", await awaitablifier.Awaitablify(Task.Run(() => "5")).HasResult <string>());
            Assert.AreEqual("5", await awaitablifier.Awaitablify(Task.Run(() => "5")).HasResult <object>());
        }
        public async Task TestObject()
        {
            var awaitablifier = new Awaitablifier();

            // for null
            Assert.AreEqual(null, await awaitablifier.Awaitablify(null));

            // for value type
            Assert.AreEqual(1, await awaitablifier.Awaitablify((object)1));

            // for ref type
            Assert.AreEqual("5", await awaitablifier.Awaitablify((object)"5"));

            // for value result task
            Assert.AreEqual(1, await awaitablifier.Awaitablify((object)Task.Run(() => 1)));

            // for ref type result task
            Assert.AreEqual("5", await awaitablifier.Awaitablify((object)Task.Run(() => "5")));

            // for unpack
            var task = Task.Run <Task <Task <string> > >(() => Task.Run <Task <string> >(() => Task.Run(() => "xyz")));

            Assert.AreEqual("xyz", await awaitablifier.UnpackAsync(task));
        }