/*
* Copyright 2016 higherfrequencytrading.com
*
* 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 net.openhft.affinity.impl;
import net.openhft.affinity.AffinitySupport;
import net.openhft.affinity.IAffinity;
import org.junit.Assume;
import org.junit.BeforeClass;
import org.junit.Test;
import software.chronicle.enterprise.internals.impl.NativeAffinity;
import static org.junit.Assert.assertTrue;
/**
* Created by andre on 22/06/15.
*/
public class NativeAffinityImpTest extends AbstractAffinityImplTest
{
@BeforeClass
public static void checkJniLibraryPresent() {
Assume.assumeTrue(NativeAffinity.LOADED);
Assume.assumeTrue("linux".equalsIgnoreCase(System.getProperty("os.name")));
}
@Override
public IAffinity getImpl()
{
return NativeAffinity.INSTANCE;
}
@Test
public void testGettid() {
System.out.println("pid=" + getImpl().getProcessId());
System.out.println("tid=" + getImpl().getThreadId());
AffinitySupport.setThreadId();
for (int j = 0; j < 3; j++) {
final int runs = 100000;
long tid = 0;
long time = 0;
for (int i = 0; i < runs; i++) {
long start = System.nanoTime();
tid = Thread.currentThread().getId();
time += System.nanoTime() - start;
assertTrue(tid > 0);
assertTrue(tid < 1 << 16);
}
System.out.printf("gettid took an average of %,d ns, tid=%d%n", time / runs, tid);
}
}
}