add comprehensive testss