basic implementation and basic test