--- /dev/null
+package jp.sourceforge.stigmata.birthmarks.osb;\r
+\r
+import java.util.Iterator;\r
+\r
+import jp.sourceforge.stigmata.cflib.Opcode;\r
+import jp.sourceforge.stigmata.cflib.OpcodeManager;\r
+\r
+import org.junit.Assert;\r
+import org.junit.Before;\r
+import org.junit.Test;\r
+\r
+public class OperandStackBehaviorsBirthmarkElementTest{\r
+ private OperandStackBehaviorsBirthmarkElement element;\r
+\r
+ @Before\r
+ public void setUp(){\r
+ OpcodeManager manager = OpcodeManager.getInstance();\r
+ Opcode[] opcodes = new Opcode[4];\r
+ opcodes[0] = manager.getOpcode(27); // iload_1\r
+ opcodes[1] = manager.getOpcode(28); // iload_2\r
+ opcodes[2] = manager.getOpcode(96); // iadd\r
+ opcodes[3] = manager.getOpcode(62); // istore_3\r
+\r
+ element = new OperandStackBehaviorsBirthmarkElement(opcodes);\r
+ }\r
+\r
+ @Test\r
+ public void testSimilarity(){\r
+ OpcodeManager manager = OpcodeManager.getInstance();\r
+ OperandStackBehaviorsBirthmarkElement element2 = new OperandStackBehaviorsBirthmarkElement(\r
+ new Opcode[] {\r
+ manager.getOpcode(27), // iload_1\r
+ manager.getOpcode(28), // iload_2\r
+ manager.getOpcode(104), // imul\r
+ manager.getOpcode(29), // iload_3\r
+ manager.getOpcode(100), // isub\r
+ manager.getOpcode(54), // istore\r
+ }\r
+ );\r
+\r
+ Assert.assertEquals(3d/7d, element.getSimilarity(element2), 1E-5);\r
+ Assert.assertEquals(3d/7d, element2.getSimilarity(element), 1E-5);\r
+ }\r
+\r
+ @Test\r
+ public void testBasic(){\r
+ Assert.assertEquals(4, element.getLength());\r
+ Assert.assertEquals("27, 28, 96, 62", element.toString());\r
+ }\r
+\r
+ @Test\r
+ public void testCategoryCheck(){\r
+ Assert.assertEquals(Opcode.Category.LOAD, element.getCategory(0));\r
+ Assert.assertEquals(Opcode.Category.LOAD, element.getCategory(1));\r
+ Assert.assertEquals(Opcode.Category.ADD, element.getCategory(2));\r
+ Assert.assertEquals(Opcode.Category.STORE, element.getCategory(3));\r
+ }\r
+\r
+ @Test\r
+ public void testOpcodeCheck(){\r
+ OpcodeManager manager = OpcodeManager.getInstance();\r
+ Assert.assertEquals(manager.getOpcode(27), element.getOpcode(0));\r
+ Assert.assertEquals(manager.getOpcode(28), element.getOpcode(1));\r
+ Assert.assertEquals(manager.getOpcode(96), element.getOpcode(2));\r
+ Assert.assertEquals(manager.getOpcode(62), element.getOpcode(3));\r
+ }\r
+\r
+ @Test\r
+ public void testOpcodeCheck2(){\r
+ OpcodeManager manager = OpcodeManager.getInstance();\r
+ Iterator<Opcode> iterator = element.iterator();\r
+ Assert.assertTrue(iterator.hasNext());\r
+ Assert.assertEquals(manager.getOpcode(27), iterator.next());\r
+ Assert.assertTrue(iterator.hasNext());\r
+ Assert.assertEquals(manager.getOpcode(28), iterator.next());\r
+ Assert.assertTrue(iterator.hasNext());\r
+ Assert.assertEquals(manager.getOpcode(96), iterator.next());\r
+ Assert.assertTrue(iterator.hasNext());\r
+ Assert.assertEquals(manager.getOpcode(62), iterator.next());\r
+ Assert.assertFalse(iterator.hasNext());\r
+ }\r
+}\r