- added some meaningful unit tests
- splitted classes into heap-allocated (starting with 'H') and stack-allocated (starting with 'S'), unfortunately there is a lot of duplicated code but I am still unable to find
an elegant solution to use the smae code to deal with both the stack-allocated class and the heap-allocated one