blob: e7454b20e18ab60f21bb54894819ee689b654023 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2013, 2015 Ericsson
*
* All rights reserved. This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0 which
* accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Jean-Christian Kouamé - Initial API and implementation
* Patrick Tasse - Updates to mipmap feature
*******************************************************************************/
package org.eclipse.tracecompass.tmf.core.tests.statesystem.mipmap;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import java.util.List;
import java.util.Random;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.tracecompass.internal.tmf.core.statesystem.mipmap.AbstractTmfMipmapStateProvider;
import org.eclipse.tracecompass.internal.tmf.core.statesystem.mipmap.TmfStateSystemOperations;
import org.eclipse.tracecompass.statesystem.core.ITmfStateSystemBuilder;
import org.eclipse.tracecompass.statesystem.core.StateSystemFactory;
import org.eclipse.tracecompass.statesystem.core.backend.IStateHistoryBackend;
import org.eclipse.tracecompass.statesystem.core.backend.StateHistoryBackendFactory;
import org.eclipse.tracecompass.statesystem.core.exceptions.AttributeNotFoundException;
import org.eclipse.tracecompass.statesystem.core.exceptions.StateSystemDisposedException;
import org.eclipse.tracecompass.statesystem.core.exceptions.StateValueTypeException;
import org.eclipse.tracecompass.statesystem.core.exceptions.TimeRangeException;
import org.eclipse.tracecompass.statesystem.core.interval.ITmfStateInterval;
import org.eclipse.tracecompass.statesystem.core.statevalue.ITmfStateValue.Type;
import org.eclipse.tracecompass.tmf.core.event.ITmfEvent;
import org.junit.BeforeClass;
import org.junit.Test;
/**
* @author Jean-Christian Kouamé
*
*/
public class TmfMipmapStateProviderTest {
@NonNull private static final String SSID = "mimap-test";
private static final String TEST_ATTRIBUTE_NAME = TmfMipmapStateProviderStub.TEST_ATTRIBUTE_NAME;
private static final int NB_LEVELS = 4;
private static final long START_TIME = 1000L;
private static final long END_TIME = 100000000L;
private static final long INTERVAL = 1000L;
private static final int RESOLUTION = 16;
private static final double DELTA = 0.0001;
private static final long TEST_TIMESTAMP = 12345000L;
private static ITmfStateSystemBuilder ssq;
/**
* Startup code, build a state system with n attributes always going up
* linearly
*/
@BeforeClass
public static void init() {
TmfMipmapStateProviderStub mmp = new TmfMipmapStateProviderStub(RESOLUTION, Type.LONG);
IStateHistoryBackend be = StateHistoryBackendFactory.createInMemoryBackend(SSID, 0);
ITmfStateSystemBuilder ssb = StateSystemFactory.newStateSystem(be);
mmp.assignTargetStateSystem(ssb);
ssq = ssb;
for (long time = START_TIME; time <= END_TIME; time += INTERVAL) {
long value = time / INTERVAL;
ITmfEvent event = mmp.createEvent(time, value);
mmp.processEvent(event);
}
mmp.dispose();
ssq.waitUntilBuilt();
}
/**
* Test a single query to the state system.
*
* Make sure the state system has data.
*
* Hint: the value read should always be t / 1000
*
*/
@Test
public void testQuery() {
assertNotNull(ssq);
try {
Random rn = new Random();
long time = Math.max(INTERVAL, rn.nextLong() % END_TIME);
List<ITmfStateInterval> intervals = ssq.queryFullState(time);
int mipmapQuark = ssq.getQuarkAbsolute(TEST_ATTRIBUTE_NAME);
ITmfStateInterval interval = intervals.get(mipmapQuark);
long valueLong = interval.getStateValue().unboxLong();
assertEquals(time / INTERVAL, valueLong);
} catch (TimeRangeException e) {
fail(e.getMessage());
} catch (StateSystemDisposedException e) {
fail(e.getMessage());
} catch (AttributeNotFoundException e) {
fail(e.getMessage());
} catch (StateValueTypeException e) {
fail(e.getMessage());
}
assertTrue(true);
}
/**
* Test a single query to the state system for the maxLevel.
*
* Make sure the state system has data.
*
*/
@Test
public void testMaxLevel() {
assertNotNull(ssq);
try {
Random rn = new Random();
long time = Math.max(INTERVAL, rn.nextLong() % END_TIME);
List<ITmfStateInterval> intervals = ssq.queryFullState(time);
int maxMipmapQuark = ssq.getQuarkAbsolute(TEST_ATTRIBUTE_NAME, AbstractTmfMipmapStateProvider.MAX_STRING);
int nbLevelMax = intervals.get(maxMipmapQuark).getStateValue().unboxInt();
assertEquals(NB_LEVELS, nbLevelMax);
int minMipmapQuark = ssq.getQuarkAbsolute(TEST_ATTRIBUTE_NAME, AbstractTmfMipmapStateProvider.MIN_STRING);
int nbLevelMin = intervals.get(minMipmapQuark).getStateValue().unboxInt();
assertEquals(NB_LEVELS, nbLevelMin);
int avgMipmapQuark = ssq.getQuarkAbsolute(TEST_ATTRIBUTE_NAME, AbstractTmfMipmapStateProvider.AVG_STRING);
int nbLevelAvg = intervals.get(avgMipmapQuark).getStateValue().unboxInt();
assertEquals(NB_LEVELS, nbLevelAvg);
} catch (TimeRangeException e) {
fail(e.getMessage());
} catch (StateSystemDisposedException e) {
fail(e.getMessage());
} catch (AttributeNotFoundException e) {
fail(e.getMessage());
} catch (StateValueTypeException e) {
fail(e.getMessage());
}
assertTrue(true);
}
/**
* Test a single query to the state system for a mip
*
* Make sure the state system has data.
*
*/
@Test
public void testQueryEventField() {
assertNotNull(ssq);
try {
List<ITmfStateInterval> intervals = ssq.queryFullState(TEST_TIMESTAMP);
int eventFieldQuark = ssq.getQuarkAbsolute(TEST_ATTRIBUTE_NAME);
ITmfStateInterval interval = intervals.get(eventFieldQuark);
long valueLong = interval.getStateValue().unboxLong();
assertEquals(TEST_TIMESTAMP / INTERVAL, valueLong);
} catch (TimeRangeException e) {
fail(e.getMessage());
} catch (StateSystemDisposedException e) {
fail(e.getMessage());
} catch (AttributeNotFoundException e) {
fail(e.getMessage());
} catch (StateValueTypeException e) {
fail(e.getMessage());
}
assertTrue(true);
}
/**
* Test a single query to the state system for a max
*
* Make sure the state system has data.
*
* Hint: the value read should always be greater than(t / 1000)
*
*/
@Test
public void testQueryMipMax() {
assertNotNull(ssq);
try {
List<ITmfStateInterval> intervals = ssq.queryFullState(TEST_TIMESTAMP);
int mipmapQuark = ssq.getQuarkAbsolute(TEST_ATTRIBUTE_NAME, AbstractTmfMipmapStateProvider.MAX_STRING);
assertEquals("max nblevels", NB_LEVELS, intervals.get(mipmapQuark).getStateValue().unboxInt());
for (int level = 1; level < NB_LEVELS; level++) {
long width = (long) Math.pow(RESOLUTION, level);
int levelQuark = ssq.getQuarkRelative(mipmapQuark, String.valueOf(level));
ITmfStateInterval interval = intervals.get(levelQuark);
long valueLong = interval.getStateValue().unboxLong();
assertEquals("max value @ level " + level, width + (((TEST_TIMESTAMP - START_TIME) / INTERVAL) / width) * width, valueLong);
assertEquals("max start time @ level " + level, START_TIME + (((TEST_TIMESTAMP - START_TIME) / INTERVAL) / width) * width * INTERVAL, interval.getStartTime());
assertEquals("max end time @ level " + level, START_TIME + (INTERVAL * width) + (((TEST_TIMESTAMP - START_TIME) / INTERVAL) / width) * width * INTERVAL, interval.getEndTime() + 1);
}
} catch (TimeRangeException e) {
fail(e.getMessage());
} catch (StateSystemDisposedException e) {
fail(e.getMessage());
} catch (AttributeNotFoundException e) {
fail(e.getMessage());
} catch (StateValueTypeException e) {
fail(e.getMessage());
}
assertTrue(true);
}
/**
* Test a single query to the state system for a min
*
* Make sure the state system has data.
*
* Hint: the value read should always be less than(t / 1000)
*/
@Test
public void testQueryMipMin() {
assertNotNull(ssq);
try {
List<ITmfStateInterval> intervals = ssq.queryFullState(TEST_TIMESTAMP);
int mipmapQuark = ssq.getQuarkAbsolute(TEST_ATTRIBUTE_NAME, AbstractTmfMipmapStateProvider.MIN_STRING);
assertEquals("min nblevels", NB_LEVELS, intervals.get(mipmapQuark).getStateValue().unboxInt());
for (int level = 1; level < NB_LEVELS; level++) {
long width = (long) Math.pow(RESOLUTION, level);
int levelQuark = ssq.getQuarkRelative(mipmapQuark, String.valueOf(level));
ITmfStateInterval interval = intervals.get(levelQuark);
long valueLong = interval.getStateValue().unboxLong();
assertEquals("min value @ level " + level, 1 + (((TEST_TIMESTAMP - START_TIME) / INTERVAL) / width) * width, valueLong);
assertEquals("min start time @ level " + level, START_TIME + (((TEST_TIMESTAMP - START_TIME) / INTERVAL) / width) * width * INTERVAL, interval.getStartTime());
assertEquals("min end time @ level " + level, START_TIME + (INTERVAL * width) + (((TEST_TIMESTAMP - START_TIME) / INTERVAL) / width) * width * INTERVAL, interval.getEndTime() + 1);
}
} catch (TimeRangeException e) {
fail(e.getMessage());
} catch (StateSystemDisposedException e) {
fail(e.getMessage());
} catch (AttributeNotFoundException e) {
fail(e.getMessage());
} catch (StateValueTypeException e) {
fail(e.getMessage());
}
assertTrue(true);
}
/**
* Test a single query to the state system for an average
*
* Make sure the state system has data.
*
* Hint: the value read should always be more or less(t / 1000)
*
*/
@Test
public void testQueryMipAvg() {
assertNotNull(ssq);
try {
List<ITmfStateInterval> intervals = ssq.queryFullState(TEST_TIMESTAMP);
int mipmapQuark = ssq.getQuarkAbsolute(TEST_ATTRIBUTE_NAME, AbstractTmfMipmapStateProvider.AVG_STRING);
assertEquals("avg nblevels", NB_LEVELS, intervals.get(mipmapQuark).getStateValue().unboxInt());
for (int level = 1; level < NB_LEVELS; level++) {
long width = (long) Math.pow(RESOLUTION, level);
int levelQuark = ssq.getQuarkRelative(mipmapQuark, String.valueOf(level));
ITmfStateInterval interval = intervals.get(levelQuark);
double valueDouble = interval.getStateValue().unboxDouble();
assertEquals("avg value @ level " + level, 0.5 + (width / 2) + (((TEST_TIMESTAMP - START_TIME) / INTERVAL) / width) * width, valueDouble, DELTA);
assertEquals("avg start time @ level " + level, START_TIME + (((TEST_TIMESTAMP - START_TIME) / INTERVAL) / width) * width * INTERVAL, interval.getStartTime());
assertEquals("avg end time @ level " + level, START_TIME + (INTERVAL * width) + (((TEST_TIMESTAMP - START_TIME) / INTERVAL) / width) * width * INTERVAL, interval.getEndTime() + 1);
}
} catch (TimeRangeException e) {
fail(e.getMessage());
} catch (StateSystemDisposedException e) {
fail(e.getMessage());
} catch (AttributeNotFoundException e) {
fail(e.getMessage());
} catch (StateValueTypeException e) {
fail(e.getMessage());
}
assertTrue(true);
}
/**
* Test a full query to the state system at the startTime
*
* Make sure the state system has data.
*
* Hint: the value read should always be more or less(t / 1000)
*
*/
@Test
public void testQueryValuesOnStart() {
assertNotNull(ssq);
try {
int quark;
List<ITmfStateInterval> intervals = ssq.queryFullState(START_TIME);
int baseQuark = ssq.getQuarkAbsolute(TEST_ATTRIBUTE_NAME);
assertEquals(START_TIME / INTERVAL, intervals.get(baseQuark).getStateValue().unboxLong());
int maxMipmapQuark = ssq.getQuarkRelative(baseQuark, AbstractTmfMipmapStateProvider.MAX_STRING);
assertEquals("max nblevels", NB_LEVELS, intervals.get(maxMipmapQuark).getStateValue().unboxInt());
quark = ssq.getQuarkRelative(maxMipmapQuark, String.valueOf(1));
assertEquals("max value @ level 1", (long) Math.pow(RESOLUTION, 1), intervals.get(quark).getStateValue().unboxLong());
quark = ssq.getQuarkRelative(maxMipmapQuark, String.valueOf(2));
assertEquals("max value @ level 2", (long) Math.pow(RESOLUTION, 2), intervals.get(quark).getStateValue().unboxLong());
quark = ssq.getQuarkRelative(maxMipmapQuark, String.valueOf(3));
assertEquals("max value @ level 3", (long) Math.pow(RESOLUTION, 3), intervals.get(quark).getStateValue().unboxLong());
quark = ssq.getQuarkRelative(maxMipmapQuark, String.valueOf(4));
assertEquals("max value @ level 4", (long) Math.pow(RESOLUTION, 4), intervals.get(quark).getStateValue().unboxLong());
int minMipmapQuark = ssq.getQuarkRelative(baseQuark, AbstractTmfMipmapStateProvider.MIN_STRING);
assertEquals("min nblevels", NB_LEVELS, intervals.get(minMipmapQuark).getStateValue().unboxInt());
quark = ssq.getQuarkRelative(minMipmapQuark, String.valueOf(1));
assertEquals("min value @ level 1", START_TIME / INTERVAL, intervals.get(quark).getStateValue().unboxLong());
quark = ssq.getQuarkRelative(minMipmapQuark, String.valueOf(2));
assertEquals("min value @ level 2", START_TIME / INTERVAL, intervals.get(quark).getStateValue().unboxLong());
quark = ssq.getQuarkRelative(minMipmapQuark, String.valueOf(3));
assertEquals("min value @ level 3", START_TIME / INTERVAL, intervals.get(quark).getStateValue().unboxLong());
quark = ssq.getQuarkRelative(minMipmapQuark, String.valueOf(4));
assertEquals("min value @ level 4", START_TIME / INTERVAL, intervals.get(quark).getStateValue().unboxLong());
int avgMipmapQuark = ssq.getQuarkRelative(baseQuark, AbstractTmfMipmapStateProvider.AVG_STRING);
assertEquals("avg nblevels", NB_LEVELS, intervals.get(avgMipmapQuark).getStateValue().unboxInt());
quark = ssq.getQuarkRelative(avgMipmapQuark, String.valueOf(1));
assertEquals("avg value @ level 1", 0.5 + Math.pow(RESOLUTION, 1) / 2, intervals.get(quark).getStateValue().unboxDouble(), DELTA);
quark = ssq.getQuarkRelative(avgMipmapQuark, String.valueOf(2));
assertEquals("avg value @ level 2", 0.5 + Math.pow(RESOLUTION, 2) / 2, intervals.get(quark).getStateValue().unboxDouble(), DELTA);
quark = ssq.getQuarkRelative(avgMipmapQuark, String.valueOf(3));
assertEquals("avg value @ level 3", 0.5 + Math.pow(RESOLUTION, 3) / 2, intervals.get(quark).getStateValue().unboxDouble(), DELTA);
quark = ssq.getQuarkRelative(avgMipmapQuark, String.valueOf(4));
assertEquals("avg value @ level 4", 0.5 + Math.pow(RESOLUTION, 4) / 2, intervals.get(quark).getStateValue().unboxDouble(), DELTA);
} catch (TimeRangeException e) {
fail(e.getMessage());
} catch (StateSystemDisposedException e) {
fail(e.getMessage());
} catch (AttributeNotFoundException e) {
fail(e.getMessage());
} catch (StateValueTypeException e) {
fail(e.getMessage());
}
assertTrue(true);
}
/**
* Test a full query to the state system when the end time
*
* Make sure the state system has data.
*
* Hint: the value read should always be more or less(t / 1000)
*
*/
@Test
public void testQueryValuesOnClose() {
assertNotNull(ssq);
try {
int quark;
List<ITmfStateInterval> intervals = ssq.queryFullState(END_TIME);
int baseQuark = ssq.getQuarkAbsolute(TEST_ATTRIBUTE_NAME);
assertEquals(END_TIME / INTERVAL, intervals.get(baseQuark).getStateValue().unboxLong());
int maxMipmapQuark = ssq.getQuarkRelative(baseQuark, AbstractTmfMipmapStateProvider.MAX_STRING);
assertEquals("max nblevels", NB_LEVELS, intervals.get(maxMipmapQuark).getStateValue().unboxInt());
quark = ssq.getQuarkRelative(maxMipmapQuark, String.valueOf(1));
assertEquals("max value @ level 1", END_TIME / INTERVAL, intervals.get(quark).getStateValue().unboxLong());
quark = ssq.getQuarkRelative(maxMipmapQuark, String.valueOf(2));
assertEquals("max value @ level 2", END_TIME / INTERVAL, intervals.get(quark).getStateValue().unboxLong());
quark = ssq.getQuarkRelative(maxMipmapQuark, String.valueOf(3));
assertEquals("max value @ level 3", END_TIME / INTERVAL, intervals.get(quark).getStateValue().unboxLong());
quark = ssq.getQuarkRelative(maxMipmapQuark, String.valueOf(4));
assertEquals("max value @ level 4", END_TIME / INTERVAL, intervals.get(quark).getStateValue().unboxLong());
int minMipmapQuark = ssq.getQuarkRelative(baseQuark, AbstractTmfMipmapStateProvider.MIN_STRING);
assertEquals("min nblevels", NB_LEVELS, intervals.get(minMipmapQuark).getStateValue().unboxInt());
quark = ssq.getQuarkRelative(minMipmapQuark, String.valueOf(1));
assertEquals("min value @ level 1", END_TIME / INTERVAL - (END_TIME - START_TIME) / INTERVAL % (long) Math.pow(RESOLUTION, 1), intervals.get(quark).getStateValue().unboxLong());
quark = ssq.getQuarkRelative(minMipmapQuark, String.valueOf(2));
assertEquals("min value @ level 2", END_TIME / INTERVAL - (END_TIME - START_TIME) / INTERVAL % (long) Math.pow(RESOLUTION, 2), intervals.get(quark).getStateValue().unboxLong());
quark = ssq.getQuarkRelative(minMipmapQuark, String.valueOf(3));
assertEquals("min value @ level 3", END_TIME / INTERVAL - (END_TIME - START_TIME) / INTERVAL % (long) Math.pow(RESOLUTION, 3), intervals.get(quark).getStateValue().unboxLong());
quark = ssq.getQuarkRelative(minMipmapQuark, String.valueOf(4));
assertEquals("min value @ level 4", END_TIME / INTERVAL - (END_TIME - START_TIME) / INTERVAL % (long) Math.pow(RESOLUTION, 4), intervals.get(quark).getStateValue().unboxLong());
int avgMipmapQuark = ssq.getQuarkRelative(baseQuark, AbstractTmfMipmapStateProvider.AVG_STRING);
assertEquals("avg nblevels", NB_LEVELS, intervals.get(avgMipmapQuark).getStateValue().unboxInt());
quark = ssq.getQuarkRelative(avgMipmapQuark, String.valueOf(1));
assertEquals("avg value @ level 1", (long) (END_TIME / INTERVAL - (double) ((END_TIME - START_TIME) / INTERVAL % (long) Math.pow(RESOLUTION, 1)) / 2), intervals.get(quark).getStateValue().unboxDouble(), DELTA);
quark = ssq.getQuarkRelative(avgMipmapQuark, String.valueOf(2));
assertEquals("avg value @ level 2", (long) (END_TIME / INTERVAL - (double) ((END_TIME - START_TIME) / INTERVAL % (long) Math.pow(RESOLUTION, 2)) / 2), intervals.get(quark).getStateValue().unboxDouble(), DELTA);
quark = ssq.getQuarkRelative(avgMipmapQuark, String.valueOf(3));
assertEquals("avg value @ level 3", (long) (END_TIME / INTERVAL - (double) ((END_TIME - START_TIME) / INTERVAL % (long) Math.pow(RESOLUTION, 3)) / 2), intervals.get(quark).getStateValue().unboxDouble(), DELTA);
quark = ssq.getQuarkRelative(avgMipmapQuark, String.valueOf(4));
assertEquals("avg value @ level 4", (long) (END_TIME / INTERVAL - (double) ((END_TIME - START_TIME) / INTERVAL % (long) Math.pow(RESOLUTION, 4)) / 2), intervals.get(quark).getStateValue().unboxDouble(), DELTA);
} catch (TimeRangeException e) {
fail(e.getMessage());
} catch (StateSystemDisposedException e) {
fail(e.getMessage());
} catch (AttributeNotFoundException e) {
fail(e.getMessage());
} catch (StateValueTypeException e) {
fail(e.getMessage());
}
assertTrue(true);
}
/**
* Test a query range to the state system to get the maximum value in the
* range
*
* Make sure the state system has data.
*
*
*/
@Test
public void testQueryMipmapRangeMax() {
assertNotNull(ssq);
try {
long max;
int quark = ssq.getQuarkAbsolute(TEST_ATTRIBUTE_NAME);
max = TmfStateSystemOperations.queryRangeMax(ssq, 0, START_TIME, quark).unboxLong();
assertEquals(START_TIME / INTERVAL, max);
max = TmfStateSystemOperations.queryRangeMax(ssq, START_TIME, START_TIME, quark).unboxLong();
assertEquals(START_TIME / INTERVAL, max);
max = TmfStateSystemOperations.queryRangeMax(ssq, START_TIME, END_TIME / 2, quark).unboxLong();
assertEquals((END_TIME / 2 / INTERVAL), max);
max = TmfStateSystemOperations.queryRangeMax(ssq, 0, END_TIME, quark).unboxLong();
assertEquals(END_TIME / INTERVAL, max);
max = TmfStateSystemOperations.queryRangeMax(ssq, END_TIME / 2, END_TIME, quark).unboxLong();
assertEquals(END_TIME / INTERVAL, max);
max = TmfStateSystemOperations.queryRangeMax(ssq, START_TIME - INTERVAL / 2, END_TIME / 2 + INTERVAL / 2, quark).unboxLong();
assertEquals(END_TIME / 2 / INTERVAL, max);
} catch (AttributeNotFoundException e) {
fail(e.getMessage());
} catch (StateValueTypeException e) {
fail(e.getMessage());
} catch (TimeRangeException e) {
fail(e.getMessage());
}
}
/**
* Test a query range to the state system to get the minimum value in the
* range
*
* Make sure the state system has data.
*
*
*/
@Test
public void testQueryMipmapRangeMin() {
assertNotNull(ssq);
try {
long min;
int quark = ssq.getQuarkAbsolute(TEST_ATTRIBUTE_NAME);
min = TmfStateSystemOperations.queryRangeMin(ssq, 0, START_TIME, quark).unboxLong();
assertEquals(START_TIME / INTERVAL, min);
min = TmfStateSystemOperations.queryRangeMin(ssq, START_TIME, START_TIME, quark).unboxLong();
assertEquals(START_TIME / INTERVAL, min);
min = TmfStateSystemOperations.queryRangeMin(ssq, START_TIME, END_TIME / 2, quark).unboxLong();
assertEquals((START_TIME / INTERVAL), min);
min = TmfStateSystemOperations.queryRangeMin(ssq, 0, END_TIME, quark).unboxLong();
assertEquals(START_TIME / INTERVAL, min);
min = TmfStateSystemOperations.queryRangeMin(ssq, END_TIME / 2, END_TIME, quark).unboxLong();
assertEquals(END_TIME / 2 / INTERVAL, min);
min = TmfStateSystemOperations.queryRangeMin(ssq, START_TIME - INTERVAL / 2, END_TIME / 2 + INTERVAL / 2, quark).unboxLong();
assertEquals(START_TIME / INTERVAL, min);
} catch (AttributeNotFoundException e) {
fail(e.getMessage());
} catch (StateValueTypeException e) {
fail(e.getMessage());
} catch (TimeRangeException e) {
fail(e.getMessage());
}
}
/**
* Test a query range to the state system to get the average value in the
* range
*
* Make sure the state system has data.
*
*/
@Test
public void testQueryMipmapRangeAvg() {
assertNotNull(ssq);
try {
double avg;
int quark = ssq.getQuarkAbsolute(TEST_ATTRIBUTE_NAME);
avg = TmfStateSystemOperations.queryRangeAverage(ssq, 0, START_TIME, quark);
assertEquals((double) (START_TIME - INTERVAL) / INTERVAL, avg, DELTA);
avg = TmfStateSystemOperations.queryRangeAverage(ssq, START_TIME, START_TIME, quark);
assertEquals((double) START_TIME / INTERVAL, avg, DELTA);
avg = TmfStateSystemOperations.queryRangeAverage(ssq, START_TIME, END_TIME / 2, quark);
assertEquals((double) (START_TIME + (END_TIME / 2 - INTERVAL)) / 2 / INTERVAL, avg, DELTA);
avg = TmfStateSystemOperations.queryRangeAverage(ssq, 0, END_TIME, quark);
assertEquals((double) (END_TIME - INTERVAL) / 2 / INTERVAL, avg, DELTA);
avg = TmfStateSystemOperations.queryRangeAverage(ssq, END_TIME / 2, END_TIME, quark);
assertEquals((double) (END_TIME / 2 + (END_TIME - INTERVAL)) / 2 / INTERVAL, avg, DELTA);
avg = TmfStateSystemOperations.queryRangeAverage(ssq, START_TIME - INTERVAL / 2, END_TIME / 2 + INTERVAL / 2, quark);
assertEquals((double) (START_TIME + (END_TIME / 2 - INTERVAL)) / 2 / INTERVAL, avg, DELTA);
} catch (AttributeNotFoundException e) {
fail(e.getMessage());
} catch (TimeRangeException e) {
fail(e.getMessage());
} catch (StateValueTypeException e) {
fail(e.getMessage());
}
}
}