/** * tests {@link ToVectorAndPrefReducer} in the error case that two similarity column vectors a supplied for the same * item (which should never happen) */ @Test public void testToVectorAndPrefReducerExceptionOn2Vectors() throws Exception { Reducer<VarIntWritable,VectorOrPrefWritable,VarIntWritable,VectorAndPrefsWritable>.Context context = EasyMock.createMock(Reducer.Context.class); EasyMock.replay(context); Vector similarityColumn1 = new RandomAccessSparseVector(Integer.MAX_VALUE, 100); Vector similarityColumn2 = new RandomAccessSparseVector(Integer.MAX_VALUE, 100); VectorOrPrefWritable similarities1 = new VectorOrPrefWritable(similarityColumn1); VectorOrPrefWritable similarities2 = new VectorOrPrefWritable(similarityColumn2); try { new ToVectorAndPrefReducer().reduce(new VarIntWritable(1), Arrays.asList(similarities1, similarities2), context); fail(); } catch (IllegalStateException e) { // good } EasyMock.verify(context); }
/** * tests {@link ToVectorAndPrefReducer} */ @Test public void testToVectorAndPrefReducer() throws Exception { Reducer<VarIntWritable,VectorOrPrefWritable,VarIntWritable,VectorAndPrefsWritable>.Context context = EasyMock.createMock(Reducer.Context.class); context.write(EasyMock.eq(new VarIntWritable(1)), vectorAndPrefsWritableMatches(Arrays.asList(123L, 456L), Arrays.asList(1.0f, 2.0f), MathHelper.elem(3, 0.5), MathHelper.elem(7, 0.8))); EasyMock.replay(context); Vector similarityColumn = new RandomAccessSparseVector(Integer.MAX_VALUE, 100); similarityColumn.set(3, 0.5); similarityColumn.set(7, 0.8); VectorOrPrefWritable itemPref1 = new VectorOrPrefWritable(123L, 1.0f); VectorOrPrefWritable itemPref2 = new VectorOrPrefWritable(456L, 2.0f); VectorOrPrefWritable similarities = new VectorOrPrefWritable(similarityColumn); new ToVectorAndPrefReducer().reduce(new VarIntWritable(1), Arrays.asList(itemPref1, itemPref2, similarities), context); EasyMock.verify(context); }