added some tests. Changed the list to store data as template typename instead of smart pointer to template typename.