+ add demo test
- update src
- improve src