Added: 
mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/similarity/jdbc/MySQLJDBCInMemoryItemSimilarityTest.java
URL: 
http://svn.apache.org/viewvc/mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/similarity/jdbc/MySQLJDBCInMemoryItemSimilarityTest.java?rev=1088059&view=auto
==============================================================================
--- 
mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/similarity/jdbc/MySQLJDBCInMemoryItemSimilarityTest.java
 (added)
+++ 
mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/similarity/jdbc/MySQLJDBCInMemoryItemSimilarityTest.java
 Sat Apr  2 16:38:38 2011
@@ -0,0 +1,85 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.mahout.cf.taste.impl.similarity.jdbc;
+
+import org.apache.mahout.cf.taste.impl.TasteTestCase;
+import org.apache.mahout.cf.taste.similarity.ItemSimilarity;
+import org.easymock.classextension.EasyMock;
+import org.junit.Test;
+
+import javax.sql.DataSource;
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+
+public class MySQLJDBCInMemoryItemSimilarityTest extends TasteTestCase {
+
+  @Test
+  public void testMemoryLoad() throws Exception {
+
+    DataSource dataSource = EasyMock.createMock(DataSource.class);
+    Connection connection = EasyMock.createMock(Connection.class);
+    PreparedStatement statement = EasyMock.createMock(PreparedStatement.class);
+    ResultSet resultSet = EasyMock.createMock(ResultSet.class);
+
+    EasyMock.expect(dataSource.getConnection()).andReturn(connection);
+    
EasyMock.expect(connection.prepareStatement(MySQLJDBCInMemoryItemSimilarity.DEFAULT_GET_ALL_ITEMSIMILARITIES_SQL,
+        ResultSet.TYPE_FORWARD_ONLY, 
ResultSet.CONCUR_READ_ONLY)).andReturn(statement);
+    statement.setFetchDirection(ResultSet.FETCH_FORWARD);
+    statement.setFetchSize(Integer.MIN_VALUE);
+    EasyMock.expect(statement.executeQuery()).andReturn(resultSet);
+
+    EasyMock.expect(resultSet.next()).andReturn(true);
+
+    EasyMock.expect(resultSet.isAfterLast()).andReturn(false);
+    EasyMock.expect(resultSet.getLong(1)).andReturn(1L);
+    EasyMock.expect(resultSet.getLong(2)).andReturn(2L);
+    EasyMock.expect(resultSet.getDouble(3)).andReturn(0.5d);
+    EasyMock.expect(resultSet.next()).andReturn(true);
+
+    EasyMock.expect(resultSet.isAfterLast()).andReturn(false);
+    EasyMock.expect(resultSet.getLong(1)).andReturn(1L);
+    EasyMock.expect(resultSet.getLong(2)).andReturn(3L);
+    EasyMock.expect(resultSet.getDouble(3)).andReturn(0.4d);
+    EasyMock.expect(resultSet.next()).andReturn(true);
+
+    EasyMock.expect(resultSet.isAfterLast()).andReturn(false);
+    EasyMock.expect(resultSet.getLong(1)).andReturn(3L);
+    EasyMock.expect(resultSet.getLong(2)).andReturn(4L);
+    EasyMock.expect(resultSet.getDouble(3)).andReturn(0.1d);
+
+    EasyMock.expect(resultSet.isAfterLast()).andReturn(true);
+
+    resultSet.close();
+    statement.close();
+    connection.close();
+
+    EasyMock.expect(resultSet.next()).andReturn(false);
+
+    EasyMock.replay(dataSource, connection, statement, resultSet);
+
+    ItemSimilarity similarity = new 
MySQLJDBCInMemoryItemSimilarity(dataSource);
+
+    assertEquals(similarity.itemSimilarity(1L, 2L), 0.5d, EPSILON);
+    assertEquals(similarity.itemSimilarity(1L, 3L), 0.4d, EPSILON);
+    assertEquals(similarity.itemSimilarity(3L, 4L), 0.1d, EPSILON);
+    assertTrue(Double.isNaN(similarity.itemSimilarity(1L, 4L)));
+
+    EasyMock.verify(dataSource, connection, statement, resultSet);
+  }
+}

Modified: 
mahout/trunk/examples/src/main/java/org/apache/mahout/cf/taste/example/kddcup/track2/HybridSimilarity.java
URL: 
http://svn.apache.org/viewvc/mahout/trunk/examples/src/main/java/org/apache/mahout/cf/taste/example/kddcup/track2/HybridSimilarity.java?rev=1088059&r1=1088058&r2=1088059&view=diff
==============================================================================
--- 
mahout/trunk/examples/src/main/java/org/apache/mahout/cf/taste/example/kddcup/track2/HybridSimilarity.java
 (original)
+++ 
mahout/trunk/examples/src/main/java/org/apache/mahout/cf/taste/example/kddcup/track2/HybridSimilarity.java
 Sat Apr  2 16:38:38 2011
@@ -23,16 +23,18 @@ import java.util.Collection;
 
 import org.apache.mahout.cf.taste.common.Refreshable;
 import org.apache.mahout.cf.taste.common.TasteException;
+import org.apache.mahout.cf.taste.impl.similarity.AbstractItemSimilarity;
 import org.apache.mahout.cf.taste.impl.similarity.LogLikelihoodSimilarity;
 import org.apache.mahout.cf.taste.model.DataModel;
 import org.apache.mahout.cf.taste.similarity.ItemSimilarity;
 
-final class HybridSimilarity implements ItemSimilarity {
+final class HybridSimilarity extends AbstractItemSimilarity {
 
   private final ItemSimilarity cfSimilarity;
   private final ItemSimilarity contentSimilarity;
 
   HybridSimilarity(DataModel dataModel, File dataFileDirectory) throws 
IOException {
+    super(dataModel);
     cfSimilarity = new LogLikelihoodSimilarity(dataModel);
     contentSimilarity = new TrackItemSimilarity(dataFileDirectory);
   }

Modified: 
mahout/trunk/examples/src/main/java/org/apache/mahout/cf/taste/example/kddcup/track2/TrackItemSimilarity.java
URL: 
http://svn.apache.org/viewvc/mahout/trunk/examples/src/main/java/org/apache/mahout/cf/taste/example/kddcup/track2/TrackItemSimilarity.java?rev=1088059&r1=1088058&r2=1088059&view=diff
==============================================================================
--- 
mahout/trunk/examples/src/main/java/org/apache/mahout/cf/taste/example/kddcup/track2/TrackItemSimilarity.java
 (original)
+++ 
mahout/trunk/examples/src/main/java/org/apache/mahout/cf/taste/example/kddcup/track2/TrackItemSimilarity.java
 Sat Apr  2 16:38:38 2011
@@ -22,9 +22,11 @@ import java.io.IOException;
 import java.util.Collection;
 
 import org.apache.mahout.cf.taste.common.Refreshable;
+import org.apache.mahout.cf.taste.common.TasteException;
 import org.apache.mahout.cf.taste.example.kddcup.KDDCupDataModel;
 import org.apache.mahout.cf.taste.impl.common.FastByIDMap;
 import org.apache.mahout.cf.taste.impl.common.FastIDSet;
+import org.apache.mahout.cf.taste.impl.common.LongPrimitiveIterator;
 import org.apache.mahout.cf.taste.similarity.ItemSimilarity;
 import org.apache.mahout.common.iterator.FileLineIterable;
 
@@ -85,6 +87,19 @@ final class TrackItemSimilarity implemen
   }
 
   @Override
+  public long[] allSimilarItemIDs(long itemID) throws TasteException {
+    FastIDSet allSimilarItemIDs = new FastIDSet();
+    LongPrimitiveIterator allItemIDs = trackData.keySetIterator();
+    while (allItemIDs.hasNext()) {
+      long possiblySimilarItemID = allItemIDs.nextLong();
+      if (!Double.isNaN(itemSimilarity(itemID, possiblySimilarItemID))) {
+        allSimilarItemIDs.add(possiblySimilarItemID);
+      }
+    }
+    return allSimilarItemIDs.toArray();
+  }
+
+  @Override
   public void refresh(Collection<Refreshable> alreadyRefreshed) {
     // do nothing
   }


Reply via email to