@Test public void testLoad() { CharArrayWriter charWriter = new CharArrayWriter(); BufferedWriter writer = new BufferedWriter(charWriter); ModelHeader header = new ModelHeader(); header.setModelType("additive"); header.setNumRecords(4); ArrayList<Double> ws = new ArrayList<Double>(); ws.add(5.0); ws.add(10.0); ws.add(-20.0); ArrayList<Double> wl = new ArrayList<Double>(); wl.add(1.0); wl.add(2.0); ModelRecord record1 = new ModelRecord(); record1.setModelHeader(header); ModelRecord record2 = new ModelRecord(); record2.setFunctionForm(FunctionForm.Spline); record2.setFeatureFamily("spline_float"); record2.setFeatureName("aaa"); record2.setWeightVector(ws); record2.setMinVal(1.0); record2.setMaxVal(3.0); ModelRecord record3 = new ModelRecord(); record3.setFunctionForm(FunctionForm.Spline); record3.setFeatureFamily("spline_string"); record3.setFeatureName("bbb"); record3.setWeightVector(ws); record3.setMinVal(1.0); record3.setMaxVal(2.0); ModelRecord record4 = new ModelRecord(); record4.setFunctionForm(FunctionForm.Linear); record4.setFeatureFamily("linear_float"); record4.setFeatureName("ccc"); record4.setWeightVector(wl); ModelRecord record5 = new ModelRecord(); record5.setFunctionForm(FunctionForm.Linear); record5.setFeatureFamily("linear_string"); record5.setFeatureName("ddd"); record5.setWeightVector(wl); try { writer.write(Util.encode(record1) + "\n"); writer.write(Util.encode(record2) + "\n"); writer.write(Util.encode(record3) + "\n"); writer.write(Util.encode(record4) + "\n"); writer.write(Util.encode(record5) + "\n"); writer.close(); } catch (IOException e) { assertTrue("Could not write", false); } String serialized = charWriter.toString(); assertTrue(serialized.length() > 0); StringReader strReader = new StringReader(serialized); BufferedReader reader = new BufferedReader(strReader); FeatureVector featureVector = makeFeatureVector(2.0f, 7.0f); try { Optional<AbstractModel> model = ModelFactory.createFromReader(reader); assertTrue(model.isPresent()); float score = model.get().scoreItem(featureVector); assertEquals(8.0f + 10.0f + 15.0f, score, 0.001f); } catch (IOException e) { assertTrue("Could not read", false); } }