/******************************************************************************* * Copyright (c) 2012-2015 INRIA. * 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: * Generoso Pagano - initial API and implementation ******************************************************************************/ package fr.inria.soctrace.test.junit.lib.model; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotEquals; import java.text.DecimalFormat; import java.text.DecimalFormatSymbols; import java.util.ArrayList; import java.util.List; import org.junit.Test; import fr.inria.soctrace.lib.model.utils.ModelConstants.TimeUnit; import fr.inria.soctrace.lib.model.utils.TimestampFormat; /** * @author "Generoso Pagano <generoso.pagano@inria.fr>" */ public class TimestampFormatTest { private char decimalSeparator; private static class FormattedNumber<T> { public T num; public String str; public FormattedNumber(T n, String s){ num = n; str = s; } } public TimestampFormatTest() { DecimalFormat format = (DecimalFormat) DecimalFormat.getInstance(); DecimalFormatSymbols symbols = format.getDecimalFormatSymbols(); decimalSeparator = symbols.getDecimalSeparator(); } @Test public void testFormatLongNs() { TimeUnit ns = TimeUnit.NANOSECONDS; List<FormattedNumber<Long>> list = new ArrayList<>(); list.add(new FormattedNumber<Long>(111L, "111 ns")); list.add(new FormattedNumber<Long>(1111L, "1" + decimalSeparator + "111 us")); list.add(new FormattedNumber<Long>(11111L, "11" + decimalSeparator + "111 us")); list.add(new FormattedNumber<Long>(111111L, "111" + decimalSeparator + "111 us")); list.add(new FormattedNumber<Long>(1111111L, "1" + decimalSeparator + "111 ms")); list.add(new FormattedNumber<Long>(11111111L, "11" + decimalSeparator + "111 ms")); list.add(new FormattedNumber<Long>(111111111L, "111" + decimalSeparator + "111 ms")); list.add(new FormattedNumber<Long>(1111111111L, "1" + decimalSeparator + "111 s")); list.add(new FormattedNumber<Long>(11111111111L, "11" + decimalSeparator + "111 s")); list.add(new FormattedNumber<Long>(111111111111L, "111" + decimalSeparator + "111 s")); list.add(new FormattedNumber<Long>(1111111111111L, "1" + decimalSeparator + "111E3 s")); list.add(new FormattedNumber<Long>(Long.MAX_VALUE, "9" + decimalSeparator + "223E9 s")); TimestampFormat f = new TimestampFormat(ns); for (FormattedNumber<Long> fl : list) { assertEquals(fl.str, f.format(fl.num)); } } @Test public void testFormatLongUs() { TimeUnit us = TimeUnit.MICROSECONDS; List<FormattedNumber<Long>> list = new ArrayList<>(); list.add(new FormattedNumber<Long>(111L, "111 us")); list.add(new FormattedNumber<Long>(1111L, "1" + decimalSeparator + "111 ms")); list.add(new FormattedNumber<Long>(11111L, "11" + decimalSeparator + "111 ms")); list.add(new FormattedNumber<Long>(111111L, "111" + decimalSeparator + "111 ms")); list.add(new FormattedNumber<Long>(1111111L, "1" + decimalSeparator + "111 s")); list.add(new FormattedNumber<Long>(11111111L, "11" + decimalSeparator + "111 s")); list.add(new FormattedNumber<Long>(111111111L, "111" + decimalSeparator + "111 s")); list.add(new FormattedNumber<Long>(1111111111L, "1" + decimalSeparator + "111E3 s")); list.add(new FormattedNumber<Long>(11111111111L, "11" + decimalSeparator + "11E3 s")); list.add(new FormattedNumber<Long>(111111111111L, "111" + decimalSeparator + "1E3 s")); list.add(new FormattedNumber<Long>(1111111111111L, "1" + decimalSeparator + "111E6 s")); list.add(new FormattedNumber<Long>(Long.MAX_VALUE, "9" + decimalSeparator + "223E12 s")); TimestampFormat f = new TimestampFormat(us); for (FormattedNumber<Long> fl : list) { assertEquals(fl.str, f.format(fl.num)); } } @Test public void testContextFormat() { TimeUnit us = TimeUnit.MICROSECONDS; TimestampFormat f = new TimestampFormat(us); long l1 = 1111112; long l2 = 1111114; assertEquals(f.format(l1), f.format(l2)); f.setContext(l1, l2); assertNotEquals(f.format(l1), f.format(l2)); } }