blob: 95e194f5852debd280688d25a59a2863c0b62384 [file] [log] [blame]
/*
* Copyright (c) 2007-2009, 2011, 2012, 2015 Eike Stepper (Berlin, Germany) and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Eike Stepper - initial API and implementation
*/
package org.eclipse.net4j.util.tests;
import org.eclipse.net4j.util.om.monitor.Monitor;
import org.eclipse.net4j.util.om.monitor.OMMonitor;
import org.eclipse.net4j.util.om.monitor.OMMonitor.Async;
/**
* @author Eike Stepper
*/
public class MonitorTest extends AbstractOMTest
{
public void testBeginNotCalledOnMonitor() throws Exception
{
try
{
OMMonitor monitor = new Monitor();
monitor.worked();
fail("IllegalStateException expected"); //$NON-NLS-1$
}
catch (IllegalStateException ex)
{
// Success
}
try
{
OMMonitor monitor = new Monitor();
monitor.fork();
fail("IllegalStateException expected"); //$NON-NLS-1$
}
catch (IllegalStateException ex)
{
// Success
}
Async async = null;
try
{
OMMonitor monitor = new Monitor();
async = monitor.forkAsync();
fail("IllegalStateException expected"); //$NON-NLS-1$
}
catch (IllegalStateException ex)
{
// Success
}
finally
{
if (async != null)
{
async.stop();
}
}
}
public void testBeginNotCalledOnNestedMonitor() throws Exception
{
try
{
OMMonitor monitor = new Monitor().begin().fork();
monitor.worked();
fail("IllegalStateException expected"); //$NON-NLS-1$
}
catch (IllegalStateException ex)
{
// Success
}
try
{
OMMonitor monitor = new Monitor().begin().fork();
monitor.fork();
fail("IllegalStateException expected"); //$NON-NLS-1$
}
catch (IllegalStateException ex)
{
// Success
}
Async async = null;
try
{
OMMonitor monitor = new Monitor().begin().fork();
async = monitor.forkAsync();
fail("IllegalStateException expected"); //$NON-NLS-1$
}
catch (IllegalStateException ex)
{
// Success
}
finally
{
if (async != null)
{
async.stop();
}
}
}
public void testBeginCalledOnMonitor() throws Exception
{
{
OMMonitor monitor = new Monitor().begin();
monitor.worked();
}
{
OMMonitor monitor = new Monitor().begin();
monitor.fork();
}
Async async = null;
try
{
OMMonitor monitor = new Monitor().begin();
async = monitor.forkAsync();
}
finally
{
if (async != null)
{
async.stop();
}
}
}
public void testBeginCalledOnNestedMonitor() throws Exception
{
{
OMMonitor monitor = new Monitor().begin().fork().begin();
monitor.worked();
}
{
OMMonitor monitor = new Monitor().begin().fork().begin();
monitor.fork();
}
Async async = null;
try
{
OMMonitor monitor = new Monitor().begin().fork().begin();
async = monitor.forkAsync();
}
finally
{
if (async != null)
{
async.stop();
}
}
}
public void testProgress() throws Exception
{
// Worked completely
{
OMMonitor monitor = new Monitor();
assertNotSame(OMMonitor.ZERO, monitor.getTotalWork());
assertEquals(OMMonitor.ZERO, monitor.getWork());
monitor.begin(OMMonitor.TEN);
assertEquals(OMMonitor.TEN, monitor.getTotalWork());
assertEquals(OMMonitor.ZERO, monitor.getWork());
for (int i = 0; i < 10; i++)
{
monitor.worked();
assertEquals(OMMonitor.TEN, monitor.getTotalWork());
assertEquals((double)i + 1, monitor.getWork());
}
monitor.done();
assertEquals(OMMonitor.TEN, monitor.getTotalWork());
assertEquals(monitor.getTotalWork(), monitor.getWork());
}
// Worked incompletely
{
OMMonitor monitor = new Monitor();
assertNotSame(OMMonitor.ZERO, monitor.getTotalWork());
assertEquals(OMMonitor.ZERO, monitor.getWork());
monitor.begin(OMMonitor.TEN);
assertEquals(OMMonitor.TEN, monitor.getTotalWork());
assertEquals(OMMonitor.ZERO, monitor.getWork());
for (int i = 0; i < 5; i++)
{
monitor.worked();
assertEquals(OMMonitor.TEN, monitor.getTotalWork());
assertEquals((double)i + 1, monitor.getWork());
}
monitor.done();
assertEquals(OMMonitor.TEN, monitor.getTotalWork());
assertEquals(monitor.getTotalWork(), monitor.getWork());
}
}
public void testNestedProgress() throws Exception
{
// Worked completely
{
OMMonitor main = new Monitor().begin();
assertEquals(OMMonitor.ONE, main.getTotalWork());
OMMonitor monitor = main.fork();
assertNotSame(OMMonitor.ZERO, monitor.getTotalWork());
assertEquals(OMMonitor.ZERO, monitor.getWork());
monitor.begin(OMMonitor.TEN);
assertEquals(OMMonitor.TEN, monitor.getTotalWork());
assertEquals(OMMonitor.ZERO, monitor.getWork());
for (int i = 0; i < 10; i++)
{
monitor.worked();
assertEquals(OMMonitor.TEN, monitor.getTotalWork());
assertEquals((double)i + 1, monitor.getWork());
assertSimilar(OMMonitor.ONE / OMMonitor.TEN * (i + 1), main.getWork(), 1000);
}
monitor.done();
assertEquals(OMMonitor.TEN, monitor.getTotalWork());
assertEquals(monitor.getTotalWork(), monitor.getWork());
assertSimilar(OMMonitor.ONE, main.getWork(), 1000);
}
// Worked incompletely
{
OMMonitor main = new Monitor().begin();
assertEquals(OMMonitor.ONE, main.getTotalWork());
OMMonitor monitor = main.fork();
assertNotSame(OMMonitor.ZERO, monitor.getTotalWork());
assertEquals(OMMonitor.ZERO, monitor.getWork());
monitor.begin(OMMonitor.TEN);
assertEquals(OMMonitor.TEN, monitor.getTotalWork());
assertEquals(OMMonitor.ZERO, monitor.getWork());
for (int i = 0; i < 5; i++)
{
monitor.worked();
assertEquals(OMMonitor.TEN, monitor.getTotalWork());
assertEquals((double)i + 1, monitor.getWork());
assertSimilar(OMMonitor.ONE / OMMonitor.TEN * (i + 1), main.getWork(), 1000);
}
monitor.done();
assertEquals(OMMonitor.TEN, monitor.getTotalWork());
assertEquals(monitor.getTotalWork(), monitor.getWork());
assertSimilar(OMMonitor.ONE, main.getWork(), 1000);
}
}
public void testAsyncProgress() throws Exception
{
final long PERIOD = 50;
OMMonitor main = new Monitor()
{
@Override
protected long getAsyncSchedulePeriod()
{
return PERIOD;
}
}.begin(3);
main.worked();
double work = main.getWork();
assertEquals(OMMonitor.ONE, work);
Async async = main.forkAsync();
for (int i = 0; i < 20; i++)
{
sleep(2 * PERIOD);
double newWork = main.getWork();
System.out.println(newWork);
// assertEquals(true, "Worked not enough: " + work, newWork > work);
// assertEquals(true, "Worked too much: " + newWork, newWork < OMMonitor.ONE + OMMonitor.ONE);
work = newWork;
}
async.stop();
assertSimilar(OMMonitor.ONE + OMMonitor.ONE, main.getWork(), 1000);
main.worked();
assertSimilar(OMMonitor.ONE + OMMonitor.ONE + OMMonitor.ONE, main.getWork(), 1000);
}
}