add test suite

struct just make code easier. It do not provide any big significant advantage.

> When I was a young boy, I had learned that object should not expose its variables to the world but use functions to read or write them. I wrote very few classes until now, but, if I must, I had always this golden rule on my mind.

Well, this is not so nice golden rule. Golden rule is minimalize API interface as you need to support it and also it should not break itself. If you make all attributes writable, then you need to assure, that no "object.attr = blabla" cannot make your object inconsistent or broken.