add ICloneable interface and demo tests