/* * Copyright (c) 2013-2015 Chris Newland. * Licensed under https://github.com/AdoptOpenJDK/jitwatch/blob/master/LICENSE-BSD * Instructions: https://github.com/AdoptOpenJDK/jitwatch/wiki */ package org.adoptopenjdk.jitwatch.test; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import org.adoptopenjdk.jitwatch.model.bytecode.LineTable; import org.adoptopenjdk.jitwatch.model.bytecode.LineTableEntry; import org.junit.Test; public class TestLineTable { @Test public void testCompositeLineTable() { LineTable table1 = new LineTable(null); LineTable table2 = new LineTable(null); LineTableEntry entry1 = new LineTableEntry(0, 0); LineTableEntry entry2 = new LineTableEntry(5, 5); LineTableEntry entry3 = new LineTableEntry(10, 10); LineTableEntry entry4 = new LineTableEntry(15, 15); table1.add(entry1); table1.add(entry2); table2.add(entry3); table2.add(entry4); LineTable composite = new LineTable(null); composite.add(table2); composite.add(table1); assertEquals(0, composite.findSourceLineForBytecodeOffset(0)); assertEquals(0, composite.findSourceLineForBytecodeOffset(1)); assertEquals(5, composite.findSourceLineForBytecodeOffset(5)); assertEquals(5, composite.findSourceLineForBytecodeOffset(6)); assertEquals(10, composite.findSourceLineForBytecodeOffset(10)); assertEquals(10, composite.findSourceLineForBytecodeOffset(11)); assertEquals(15, composite.findSourceLineForBytecodeOffset(15)); assertEquals(15, composite.findSourceLineForBytecodeOffset(16)); assertTrue(table1.sourceLineInRange(0)); assertTrue(table1.sourceLineInRange(1)); assertTrue(table1.sourceLineInRange(5)); assertFalse(table1.sourceLineInRange(-1)); assertFalse(table1.sourceLineInRange(6)); assertFalse(table1.sourceLineInRange(10)); assertTrue(table2.sourceLineInRange(10)); assertTrue(table2.sourceLineInRange(11)); assertTrue(table2.sourceLineInRange(15)); assertFalse(table2.sourceLineInRange(-1)); assertFalse(table2.sourceLineInRange(6)); assertFalse(table2.sourceLineInRange(25)); assertTrue(composite.sourceLineInRange(1)); assertTrue(composite.sourceLineInRange(11)); assertTrue(composite.sourceLineInRange(15)); assertFalse(composite.sourceLineInRange(-1)); assertFalse(composite.sourceLineInRange(25)); } @Test public void testNashornLineTableRegression() { LineTable table = new LineTable(null); LineTableEntry entry1 = new LineTableEntry(8, 21); LineTableEntry entry2 = new LineTableEntry(1, 50); LineTableEntry entry3 = new LineTableEntry(3, 57); LineTableEntry entry4 = new LineTableEntry(5, 81); LineTableEntry entry5 = new LineTableEntry(3, 118); table.add(entry1); table.add(entry2); table.add(entry3); table.add(entry4); table.add(entry5); assertTrue(table.sourceLineInRange(1)); } @Test public void testNonSequentialBCIs() { LineTable table = new LineTable(null); table.add(new LineTableEntry(21, 2)); table.add(new LineTableEntry(23, 4)); table.add(new LineTableEntry(23, 73)); table.add(new LineTableEntry(25, 14)); table.add(new LineTableEntry(26, 17)); table.add(new LineTableEntry(28, 20)); table.add(new LineTableEntry(30, 27)); table.add(new LineTableEntry(33, 30)); table.add(new LineTableEntry(34, 42)); table.add(new LineTableEntry(36, 54)); table.add(new LineTableEntry(38, 64)); table.add(new LineTableEntry(42, 70)); table.add(new LineTableEntry(46, 79)); table.add(new LineTableEntry(48, 103)); for (LineTableEntry entry : table.getEntries()) { assertEquals(entry.getSourceOffset(), table.findSourceLineForBytecodeOffset(entry.getBytecodeOffset())); } assertEquals(33, table.findSourceLineForBytecodeOffset(31)); assertEquals(46, table.findSourceLineForBytecodeOffset(80)); assertEquals(46, table.findSourceLineForBytecodeOffset(81)); assertEquals(46, table.findSourceLineForBytecodeOffset(82)); assertEquals(48, table.findSourceLineForBytecodeOffset(5000)); } }