OSDN Git Service

cflib は plugins プロジェクトから,Stigmata直下のプロジェクトに移行したため,このリポジトリからは削除した.
[stigmata/stigmata-plugins.git] / osb / src / test / java / jp / sourceforge / stigmata / birthmarks / osb / OperandStackBehaviorsBirthmarkElementTest.java
diff --git a/osb/src/test/java/jp/sourceforge/stigmata/birthmarks/osb/OperandStackBehaviorsBirthmarkElementTest.java b/osb/src/test/java/jp/sourceforge/stigmata/birthmarks/osb/OperandStackBehaviorsBirthmarkElementTest.java
new file mode 100644 (file)
index 0000000..2c53211
--- /dev/null
@@ -0,0 +1,82 @@
+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