### Question:
ALSSpeedModel implements SpeedModel { @Override public String toString() { return "ALSSpeedModel[features:" + features + ", implicit:" + implicit + ", logStrength:" + logStrength + ", epsilon:" + epsilon + ", X:(" + X.size() + " users), Y:(" + Y.size() + " items), fractionLoaded:" + getFractionLoaded() + "]"; } ALSSpeedModel(int features, boolean implicit, boolean logStrength, double epsilon); int getFeatures(); boolean isImplicit(); boolean isLogStrength(); double getEpsilon(); float[] getUserVector(String user); float[] getItemVector(String item); void setUserVector(String user, float[] vector); void setItemVector(String item, float[] vector); void retainRecentAndUserIDs(Collection<String> users); void retainRecentAndItemIDs(Collection<String> items); Solver getXTXSolver(); Solver getYTYSolver(); @Override float getFractionLoaded(); @Override String toString();  }### Answer:
@Test public void testToString() { String modelToString = new ALSSpeedModel(2, true, true, 0.01).toString(); assertContains(modelToString, "ALSSpeedModel"); assertContains(modelToString, "features:2"); assertContains(modelToString, "implicit:true"); assertContains(modelToString, "logStrength:true"); assertContains(modelToString, "epsilon:0.01"); }