add a symbol unit test
change build system to support test hot and cold simultaneously
split test files to reduce minimal dependency.
This means even part of the fan is broken, we could still test its non-broken part