/*******************************************************************************
* Copyright 2014 Analog Devices, Inc.
*
* Licensed 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 com.analog.lyric.benchmarking.utils.doublespace.test;
import static com.analog.lyric.benchmarking.utils.doublespace.IndexerFactory.*;
import static com.analog.lyric.benchmarking.utils.doublespace.test.Utilities.*;
import static org.hamcrest.CoreMatchers.*;
import static org.junit.Assert.*;
import java.util.Arrays;
import java.util.Comparator;
import java.util.Set;
import java.util.TreeSet;
import org.junit.Test;
import com.analog.lyric.benchmarking.utils.doublespace.DoubleSpace;
import com.analog.lyric.benchmarking.utils.doublespace.DoubleSpaceFactory;
import com.analog.lyric.benchmarking.utils.doublespace.JointIndexer;
import org.eclipse.jdt.annotation.NonNullByDefault;
public class IndexedDoubleSpaceTest
{
@Test
@NonNullByDefault(false)
public void testPunchthrough()
{
final DoubleSpace s = DoubleSpaceFactory.create(4, 4);
final DoubleSpace v = s.view(range(1, 3), range(0, 2));
for (final int[] coordinates : v.coordinatesSet())
{
v.put(1, coordinates);
}
final JointIndexer shouldBeOnes = new JointIndexer(range(1, 3), range(0, 2));
for (final int[] coordinates : shouldBeOnes.coordinatesSet())
{
assertThat(s.get(coordinates), equalTo(1.0));
}
final Comparator<int[]> coordinatesComparator = new Comparator<int[]>()
{
@Override
public int compare(int[] arg0, int[] arg1)
{
if (arg0.length < arg1.length)
{
return -1;
}
if (arg0.length != arg1.length)
{
return 1;
}
if (Arrays.equals(arg0, arg1))
{
return 0;
}
for (int i = 0; i < arg0.length; i++)
{
if (arg0[i] < arg1[i])
{
return -1;
}
}
return 1;
}
};
final Set<int[]> shouldBeZeroes = new TreeSet<int[]>(coordinatesComparator);
shouldBeZeroes.addAll(s.coordinatesSet());
shouldBeZeroes.removeAll(shouldBeOnes.coordinatesSet());
for (final int[] coordinates : shouldBeZeroes)
{
assertThat(s.get(coordinates), equalTo(0.0));
}
}
@Test
public void testSimpleCoordinateSet()
{
final DoubleSpace s = DoubleSpaceFactory.create(100, 100);
final DoubleSpace v = s.view(range(10, 20), range(40, 60));
final JointIndexer indexer = new JointIndexer(range(0, 10), range(0, 20));
compareIterables(indexer.coordinatesSet(), v.coordinatesSet());
}
@Test
public void testSimpleDimensions()
{
final DoubleSpace s = DoubleSpaceFactory.create(100, 100);
final DoubleSpace v = s.view(range(10, 20), range(40, 60));
assertThat(v.getDimensionsCount(), equalTo(2));
}
@Test
public void testSkippedAtEndCoordinateSet()
{
final DoubleSpace s = DoubleSpaceFactory.create(8, 8, 8);
final DoubleSpace v = s.view(range(0, 2), range(4, 6));
final JointIndexer indexer = new JointIndexer(range(0, 2), range(0, 2), range(0, 7));
compareIterables(indexer.coordinatesSet(), v.coordinatesSet());
}
@Test
public void testSkippedAtEndDimensions()
{
final DoubleSpace s = DoubleSpaceFactory.create(8, 8, 8);
final DoubleSpace v = s.view(range(0, 2), range(4, 6));
assertThat(v.getDimensionsCount(), equalTo(3));
}
@Test
public void testSkippedMiddleCoordinateSet()
{
final DoubleSpace s = DoubleSpaceFactory.create(8, 8, 8);
final DoubleSpace v = s.view(range(0, 2), just(2), range(4, 7));
final JointIndexer indexer = new JointIndexer(range(0, 2), range(0, 3));
compareIterables(indexer.coordinatesSet(), v.coordinatesSet());
}
@Test
public void testSkippedMiddleDimensions()
{
final DoubleSpace s = DoubleSpaceFactory.create(8, 8, 8);
final DoubleSpace v = s.view(range(0, 2), just(2), range(4, 6));
assertThat(v.getDimensionsCount(), equalTo(2));
}
}