@Test public void testFromMap() { for (Map<String,String> map: someMaps(strings(), strings())) { MetricResult result = MetricResult.fromMap(map); assertThat(result.getValues(), equalTo((Map) map)); } } }
@Test public void testClampValue() { PreferenceDomain d = PreferenceDomain.fromString("[1.0,5.0]"); for (Map<Long,Double> vec: someMaps(longs(), doubles(0.0, 8.0))) { Long2DoubleMap clamped = d.clampVector(vec); assertThat(clamped.keySet(), equalTo(vec.keySet())); for (Long k: vec.keySet()) { double v = vec.get(k); if (v < 1.0) { assertThat(clamped, hasEntry(k, 1.0)); } else if (v > 5.0) { assertThat(clamped, hasEntry(k, 5.0)); } else { assertThat(clamped, hasEntry(k, v)); } } } } }
@Test public void testRandomMaps() { for (Map<Long,Double> map: someMaps(longs(), doubles())) { Long2DoubleSortedArrayMap vec = Long2DoubleSortedArrayMap.create(map); Set<Long> picked = sets(map.keySet()).next(); Set<Long> extra = sets(longs()).next(); LongSortedSet wanted = LongUtils.setUnion(LongUtils.asLongSet(picked), LongUtils.asLongSet(extra)); Long2DoubleSortedMap sv = vec.subMap(wanted); assertThat(sv.keySet(), everyItem(isIn(wanted))); assertThat(sv.keySet(), containsInAnyOrder(picked.toArray())); assertThat(sv.entrySet(), everyItem(isIn(map.entrySet()))); } }
@Test public void testManyItems() { Generator<Double> globals = doubles(); for (Map<Long,Double> map: someMaps(positiveLongs(), doubles())) { double bias = globals.next(); Long2DoubleMap itemBiases = Long2DoubleSortedArrayMap.create(map); BiasModel model = new UserItemBiasModel(bias, Long2DoubleMaps.EMPTY_MAP, itemBiases); assertThat(model.getIntercept(), equalTo(bias)); assertThat(model.getItemBiases(itemBiases.keySet()), equalTo(itemBiases)); for (Set<Long> users : someSets(positiveLongs())) { Long2DoubleMap biases = model.getItemBiases(LongUtils.packedSet(users)); for (long user: users) { if (itemBiases.containsKey(user)) { assertThat(biases.get(user), equalTo(itemBiases.get(user))); } else { assertThat(biases.get(user), equalTo(0.0)); } } } } }
@Test public void testManyUsers() { Generator<Double> globals = doubles(); for (Map<Long,Double> map: someMaps(positiveLongs(), doubles())) { double bias = globals.next(); Long2DoubleMap userBiases = Long2DoubleSortedArrayMap.create(map); BiasModel model = new UserItemBiasModel(bias, userBiases, Long2DoubleMaps.EMPTY_MAP); assertThat(model.getIntercept(), equalTo(bias)); assertThat(model.getUserBiases(userBiases.keySet()), equalTo(userBiases)); for (Set<Long> users : someSets(positiveLongs())) { Long2DoubleMap biases = model.getUserBiases(LongUtils.packedSet(users)); for (long user: users) { if (userBiases.containsKey(user)) { assertThat(biases.get(user), equalTo(userBiases.get(user))); } else { assertThat(biases.get(user), equalTo(0.0)); } } } } }
@Test public void testUnitVector() { for (Map<Long,Double> map: someMaps(longs(), doubles(-100, 100))) { if (map.isEmpty()) { continue; } Long2DoubleMap vec = LongUtils.frozenMap(map); double norm = Vectors.euclideanNorm(vec); Long2DoubleMap unit = Vectors.unitVector(vec); assertThat(unit.size(), equalTo(vec.size())); assertThat(unit.keySet(), equalTo(vec.keySet())); assertThat(Vectors.euclideanNorm(unit), closeTo(1.0, 1.0e-6)); Long2DoubleMaps.fastForEach(unit, e -> { assertThat(e.getDoubleValue() * norm, closeTo(vec.get(e.getLongKey()), 1.0e-6)); }); } } }
@Test public void testAddScalarSorted() { for (Map<Long,Double> map: someMaps(longs(), doubles(-1000, 1000))) { double scalar = doubles(-250, 250).next(); Long2DoubleMap m = Long2DoubleSortedArrayMap.create(map); Long2DoubleMap result = Vectors.addScalar(m, scalar); assertThat(Vectors.sum(result), closeTo(Vectors.sum(m) + m.size() * scalar, 1.0e-6)); for (long key: result.keySet()) { assertThat(result.get(key), closeTo(map.get(key) + scalar, 1.0e-6)); } } }
@Test public void testAddScalar() { for (Map<Long,Double> map: someMaps(longs(), doubles(-1000, 1000))) { double scalar = doubles(-250, 250).next(); Long2DoubleMap m = new Long2DoubleOpenHashMap(map); Long2DoubleMap result = Vectors.addScalar(m, scalar); assertThat(Vectors.sum(result), closeTo(Vectors.sum(m) + m.size() * scalar, 1.0e-6)); for (long key: result.keySet()) { assertThat(result.get(key), closeTo(map.get(key) + scalar, 1.0e-6)); } } }
@Test public void testDotVectors() { for (Map<Long,Double> map: someMaps(longs(), doubles(-1000, 1000))) { Long2DoubleMap m = new Long2DoubleOpenHashMap(map); assertThat(Vectors.dotProduct(m, m), equalTo(Vectors.sumOfSquares(m))); if (!m.isEmpty()) { long k1 = m.keySet().iterator().nextLong(); double v1 = m.get(k1); Long2DoubleMap m2 = new Long2DoubleOpenHashMap(m); m2.remove(k1); long k2 = k1; // find a key we haven't seen yet while (m2.containsKey(k2) || k2 == k1) { k2++; } m2.put(k2, v1); // and test that it is missing from the dot product assertThat(Vectors.dotProduct(m, m2), closeTo(Vectors.sumOfSquares(m) - v1 * v1, 1.0e-6)); } } }
@Test public void testDotSortedVectors() { for (Map<Long,Double> map: someMaps(longs(), doubles(-1000, 1000))) { Long2DoubleMap m = new Long2DoubleSortedArrayMap(map); assertThat(Vectors.dotProduct(m, m), equalTo(Vectors.sumOfSquares(m))); if (!m.isEmpty()) { long k1 = m.keySet().iterator().nextLong(); double v1 = m.get(k1); Long2DoubleMap m2 = new Long2DoubleOpenHashMap(m); m2.remove(k1); long k2 = k1; // find a key we haven't seen yet while (m2.containsKey(k2) || k2 == k1) { k2++; } m2.put(k2, v1); m2 = new Long2DoubleSortedArrayMap(m2); // and test that it is missing from the dot product assertThat(Vectors.dotProduct(m, m2), closeTo(Vectors.sumOfSquares(m) - v1 * v1, 1.0e-6)); } } }