Package org.grouplens.lenskit.data.snapshot

Source Code of org.grouplens.lenskit.data.snapshot.PackedPreferenceSnapshotTest

/*
* LensKit, an open source recommender systems toolkit.
* Copyright 2010-2014 LensKit Contributors.  See CONTRIBUTORS.md.
* Work on LensKit has been funded by the National Science Foundation under
* grants IIS 05-34939, 08-08692, 08-12148, and 10-17697.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
* details.
*
* You should have received a copy of the GNU General Public License along with
* this program; if not, write to the Free Software Foundation, Inc., 51
* Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
package org.grouplens.lenskit.data.snapshot;

import it.unimi.dsi.fastutil.longs.LongCollection;
import org.grouplens.lenskit.data.dao.EventCollectionDAO;
import org.grouplens.lenskit.data.dao.EventDAO;
import org.grouplens.lenskit.data.event.Rating;
import org.grouplens.lenskit.data.event.Ratings;
import org.grouplens.lenskit.data.pref.IndexedPreference;
import org.grouplens.lenskit.data.pref.Preference;
import org.grouplens.lenskit.data.pref.Preferences;
import org.grouplens.lenskit.indexes.IdIndexMapping;
import org.grouplens.lenskit.vectors.SparseVector;
import org.junit.Before;
import org.junit.Test;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Random;

import static org.hamcrest.Matchers.hasSize;
import static org.junit.Assert.*;

public class PackedPreferenceSnapshotTest {

    private PackedPreferenceSnapshot snap;
    private static final double EPSILON = 1.0e-6;

    private static Rating rating(long uid, long iid, double value, long ts) {
        return Ratings.make(uid, iid, value, ts);
    }

    private static Preference preference(long uid, long iid, double value) {
        return Preferences.make(uid, iid, value);
    }

    @Before
    public void setup() {
        List<Rating> rs = new ArrayList<Rating>();
        rs.add(rating(1, 7, 4, 1));
        rs.add(rating(3, 7, 3, 1));
        rs.add(rating(4, 7, 5, 1));
        rs.add(rating(4, 7, 4, 2));
        rs.add(rating(5, 7, 3, 1));
        rs.add(rating(6, 7, 5, 1));
        rs.add(rating(1, 8, 4, 1));
        rs.add(rating(1, 8, 5, 2));
        rs.add(rating(3, 8, 3, 1));
        rs.add(rating(4, 8, 2, 1));
        rs.add(rating(5, 8, 3, 1));
        rs.add(rating(5, 8, 5, 2));
        rs.add(rating(6, 8, 5, 1));
        rs.add(rating(7, 8, 2, 1));
        rs.add(rating(1, 9, 3, 1));
        rs.add(rating(3, 9, 4, 1));
        rs.add(rating(4, 9, 5, 1));
        rs.add(rating(7, 9, 2, 1));
        rs.add(rating(7, 9, 3, 2));
        rs.add(rating(4, 10, 4, 1));
        rs.add(rating(7, 10, 4, 1));
        rs.add(rating(1, 11, 5, 1));
        rs.add(rating(3, 11, 5, 2));
        rs.add(rating(4, 11, 5, 1));
        EventDAO dao = EventCollectionDAO.create(rs);
        snap = new PackedPreferenceSnapshotBuilder(dao, new Random()).get();
    }

    @Test
    public void testBasicStats() {
        assertThat(snap.getRatings(), hasSize(20));
    }

    @Test
    public void testGetUserIds() {
        LongCollection users = snap.getUserIds();
        assertTrue(users.contains(1));
        assertTrue(users.contains(3));
        assertTrue(users.contains(4));
        assertTrue(users.contains(5));
        assertTrue(users.contains(6));
        assertTrue(users.contains(7));
    }

    @Test
    public void testGetItemIds() {
        LongCollection items = snap.getItemIds();
        assertEquals(5, items.size());
        assertTrue(items.contains(7));
        assertTrue(items.contains(8));
        assertTrue(items.contains(9));
        assertTrue(items.contains(10));
        assertTrue(items.contains(11));
    }

    @Test
    public void testUserIndex() {
        IdIndexMapping ind = snap.userIndex();
        assertEquals(6, ind.size());
        assertTrue(ind.getIdList().contains(1));
        assertTrue(ind.getIdList().contains(3));
        assertTrue(ind.getIdList().contains(4));
        assertTrue(ind.getIdList().contains(5));
        assertTrue(ind.getIdList().contains(6));
        assertTrue(ind.getIdList().contains(7));
        assertEquals(0, ind.getIndex(1));
        assertEquals(1, ind.getIndex(3));
        assertEquals(2, ind.getIndex(4));
        assertEquals(3, ind.getIndex(5));
        assertEquals(4, ind.getIndex(6));
        assertEquals(5, ind.getIndex(7));
        assertEquals(1, ind.getId(0));
        assertEquals(3, ind.getId(1));
        assertEquals(4, ind.getId(2));
        assertEquals(5, ind.getId(3));
        assertEquals(6, ind.getId(4));
        assertEquals(7, ind.getId(5));
    }

    @Test
    public void testItemIndex() {
        IdIndexMapping ind = snap.itemIndex();
        assertEquals(5, ind.size());
        assertTrue(ind.getIdList().contains(7));
        assertTrue(ind.getIdList().contains(8));
        assertTrue(ind.getIdList().contains(9));
        assertTrue(ind.getIdList().contains(10));
        assertTrue(ind.getIdList().contains(11));
        assertEquals(0, ind.getIndex(7));
        assertEquals(1, ind.getIndex(8));
        assertEquals(2, ind.getIndex(9));
        assertEquals(3, ind.getIndex(10));
        assertEquals(4, ind.getIndex(11));
        assertEquals(7, ind.getId(0));
        assertEquals(8, ind.getId(1));
        assertEquals(9, ind.getId(2));
        assertEquals(10, ind.getId(3));
        assertEquals(11, ind.getId(4));
    }

    @Test
    public void testGetRatings() {
        Collection<IndexedPreference> ratings = snap.getRatings();
        assertEquals(20, ratings.size());
        assertTrue(ratings.contains(preference(1, 7, 4)));
        assertTrue(ratings.contains(preference(3, 7, 3)));
        assertTrue(ratings.contains(preference(4, 7, 4)));
        assertTrue(ratings.contains(preference(5, 7, 3)));
        assertTrue(ratings.contains(preference(6, 7, 5)));
        assertTrue(ratings.contains(preference(1, 8, 5)));
        assertTrue(ratings.contains(preference(3, 8, 3)));
        assertTrue(ratings.contains(preference(4, 8, 2)));
        assertTrue(ratings.contains(preference(5, 8, 5)));
        assertTrue(ratings.contains(preference(6, 8, 5)));
        assertTrue(ratings.contains(preference(7, 8, 2)));
        assertTrue(ratings.contains(preference(1, 9, 3)));
        assertTrue(ratings.contains(preference(3, 9, 4)));
        assertTrue(ratings.contains(preference(4, 9, 5)));
        assertTrue(ratings.contains(preference(7, 9, 3)));
        assertTrue(ratings.contains(preference(4, 10, 4)));
        assertTrue(ratings.contains(preference(7, 10, 4)));
        assertTrue(ratings.contains(preference(1, 11, 5)));
        assertTrue(ratings.contains(preference(3, 11, 5)));
        assertTrue(ratings.contains(preference(4, 11, 5)));
    }

    @Test
    public void testGetUserRatings() {
        Collection<IndexedPreference> ratings = snap.getUserRatings(1);
        assertThat(ratings, hasSize(4));
        assertTrue(ratings.contains(preference(1, 7, 4)));
        assertTrue(ratings.contains(preference(1, 8, 5)));
        assertTrue(ratings.contains(preference(1, 9, 3)));
        assertTrue(ratings.contains(preference(1, 11, 5)));

        ratings = snap.getUserRatings(2);
        assertEquals(0, ratings.size());

        ratings = snap.getUserRatings(3);
        assertEquals(4, ratings.size());
        assertTrue(ratings.contains(preference(3, 7, 3)));
        assertTrue(ratings.contains(preference(3, 8, 3)));
        assertTrue(ratings.contains(preference(3, 9, 4)));
        assertTrue(ratings.contains(preference(3, 11, 5)));

        ratings = snap.getUserRatings(4);
        assertEquals(5, ratings.size());
        assertTrue(ratings.contains(preference(4, 7, 4)));
        assertTrue(ratings.contains(preference(4, 8, 2)));
        assertTrue(ratings.contains(preference(4, 9, 5)));
        assertTrue(ratings.contains(preference(4, 10, 4)));
        assertTrue(ratings.contains(preference(4, 11, 5)));

        ratings = snap.getUserRatings(5);
        assertEquals(2, ratings.size());
        assertTrue(ratings.contains(preference(5, 7, 3)));
        assertTrue(ratings.contains(preference(5, 8, 5)));

        ratings = snap.getUserRatings(6);
        assertEquals(2, ratings.size());
        assertTrue(ratings.contains(preference(6, 7, 5)));
        assertTrue(ratings.contains(preference(6, 8, 5)));

        ratings = snap.getUserRatings(7);
        assertEquals(3, ratings.size());
        assertTrue(ratings.contains(preference(7, 8, 2)));
        assertTrue(ratings.contains(preference(7, 9, 3)));
        assertTrue(ratings.contains(preference(7, 10, 4)));
    }

    @Test
    public void testUserRatingVector() {
        SparseVector ratings = snap.userRatingVector(1);
        assertEquals(4, ratings.size());
        assertEquals(4, ratings.get(7), EPSILON);
        assertEquals(5, ratings.get(8), EPSILON);
        assertEquals(3, ratings.get(9), EPSILON);
        assertEquals(5, ratings.get(11), EPSILON);

        ratings = snap.userRatingVector(2);
        assertEquals(0, ratings.size());

        ratings = snap.userRatingVector(3);
        assertEquals(4, ratings.size());
        assertEquals(3, ratings.get(7), EPSILON);
        assertEquals(3, ratings.get(8), EPSILON);
        assertEquals(4, ratings.get(9), EPSILON);
        assertEquals(5, ratings.get(11), EPSILON);

        ratings = snap.userRatingVector(4);
        assertEquals(5, ratings.size());
        assertEquals(4, ratings.get(7), EPSILON);
        assertEquals(2, ratings.get(8), EPSILON);
        assertEquals(5, ratings.get(9), EPSILON);
        assertEquals(4, ratings.get(10), EPSILON);
        assertEquals(5, ratings.get(11), EPSILON);

        ratings = snap.userRatingVector(5);
        assertEquals(2, ratings.size());
        assertEquals(3, ratings.get(7), EPSILON);
        assertEquals(5, ratings.get(8), EPSILON);

        ratings = snap.userRatingVector(6);
        assertEquals(2, ratings.size());
        assertEquals(5, ratings.get(7), EPSILON);
        assertEquals(5, ratings.get(8), EPSILON);

        ratings = snap.userRatingVector(7);
        assertEquals(3, ratings.size());
        assertEquals(2, ratings.get(8), EPSILON);
        assertEquals(3, ratings.get(9), EPSILON);
        assertEquals(4, ratings.get(10), EPSILON);
    }
}
TOP

Related Classes of org.grouplens.lenskit.data.snapshot.PackedPreferenceSnapshotTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.