Revert "Merge branch 'Branch4'"

This reverts commit 3d0e2d6586e6a2f29591a99e01375a1d530b0f98, reversing
changes made to f0c79b970b5c5e30440d2be885255a99e28958d0.
Revert "Merge branch 'Branch3'"

This reverts commit f0c79b970b5c5e30440d2be885255a99e28958d0, reversing
changes made to e778afd916a091c42dbcc982f0e4bc23949d7dcb.
Revert "Merge branch 'Branch2'"

This reverts commit e778afd916a091c42dbcc982f0e4bc23949d7dcb, reversing
changes made to 5b32bef330a24ce718cd7cdf7dcb5f9430356747.
Revert "Merge branch 'Branch1'"

This reverts commit 5b32bef330a24ce718cd7cdf7dcb5f9430356747, reversing
changes made to f0325a02b848e0dcde5265ac1100002e87f2107a.
q1&2&3

adding unit tests