OSDN Git Service

add calculator, and test case
[stigmata/stigmata-plugins.git] / wsp / src / test / java / jp / sourceforge / stigmata / birthmarks / wsp / StackPatternBasedBirthmarkElementTest.java
1 package jp.sourceforge.stigmata.birthmarks.wsp;
2
3 /*
4  * $Id$
5  */
6
7 import org.junit.Assert;
8 import org.junit.Before;
9 import org.junit.Test;
10
11 /**
12  * 
13  * @author Haruaki Tamada
14  * @version $Revision$
15  */
16 public class StackPatternBasedBirthmarkElementTest{
17     private StackPatternBasedBirthmarkElement element;
18
19     @Before
20     public void setup(){
21         CurrentDepth[] depthList = new CurrentDepth[7];
22
23         depthList[0] = new CurrentDepth(1, new Opcode( 26, "iload_0",      0,  1, Opcode.Category.NORMAL, 7));
24         depthList[1] = new CurrentDepth(2, new Opcode( 26, "iload_0",      0,  1, Opcode.Category.NORMAL, 7));
25         depthList[2] = new CurrentDepth(3, new Opcode(  4, "iconst_1",     0,  1, Opcode.Category.NORMAL, 1));
26         depthList[3] = new CurrentDepth(2, new Opcode(100, "isub",         0, -1, Opcode.Category.NORMAL, 4));
27         depthList[4] = new CurrentDepth(2, new Opcode(184, "invokestatic", 2,  0, Opcode.Category.INVOKE, 1));
28         depthList[5] = new CurrentDepth(1, new Opcode(104, "imul",         0, -1, Opcode.Category.NORMAL, 6));
29         depthList[6] = new CurrentDepth(0, new Opcode(172, "ireturn",      0, -1, Opcode.Category.NORMAL, 2));
30
31         element = new StackPatternBasedBirthmarkElement(depthList);
32     }
33
34     @Test
35     public void testBasic() throws Exception{
36         Assert.assertEquals(7, element.getLength());
37         Assert.assertEquals(28, element.getWeight());
38
39         Assert.assertEquals(1, element.getDepth(0).getDepth());
40         Assert.assertEquals(2, element.getDepth(1).getDepth());
41         Assert.assertEquals(3, element.getDepth(2).getDepth());
42         Assert.assertEquals(2, element.getDepth(3).getDepth());
43         Assert.assertEquals(2, element.getDepth(4).getDepth());
44         Assert.assertEquals(1, element.getDepth(5).getDepth());
45         Assert.assertEquals(0, element.getDepth(6).getDepth());
46     }
47
48     @Test
49     public void testBuildFromString() throws Exception{
50         StackPatternBasedBirthmarkElement element2 = new StackPatternBasedBirthmarkElement(element.toString());
51
52         Assert.assertEquals(7, element2.getLength());
53         Assert.assertEquals(28, element2.getWeight());
54
55         Assert.assertEquals(1, element2.getDepth(0).getDepth());
56         Assert.assertEquals(2, element2.getDepth(1).getDepth());
57         Assert.assertEquals(3, element2.getDepth(2).getDepth());
58         Assert.assertEquals(2, element2.getDepth(3).getDepth());
59         Assert.assertEquals(2, element2.getDepth(4).getDepth());
60         Assert.assertEquals(1, element2.getDepth(5).getDepth());
61         Assert.assertEquals(0, element2.getDepth(6).getDepth());
62     }
63
64     @Test
65     public void testCalculateWeightedCommonSubsequence(){
66         CurrentDepth[] depthList = new CurrentDepth[10];
67         depthList[0] = new CurrentDepth(1, new Opcode( 26, "iload_0",      0,  1, Opcode.Category.NORMAL, 7));
68         depthList[1] = new CurrentDepth(2, new Opcode(  4, "iconst_1",     0,  1, Opcode.Category.NORMAL, 1));
69         depthList[2] = new CurrentDepth(1, new Opcode(100, "isub",         0, -1, Opcode.Category.NORMAL, 4));
70         depthList[3] = new CurrentDepth(1, new Opcode(184, "invokestatic", 2,  0, Opcode.Category.INVOKE, 1));
71         depthList[4] = new CurrentDepth(2, new Opcode( 26, "iload_0",      0,  1, Opcode.Category.NORMAL, 7));
72         depthList[5] = new CurrentDepth(3, new Opcode(  5, "iconst_2",     0,  1, Opcode.Category.NORMAL, 1));
73         depthList[6] = new CurrentDepth(2, new Opcode(100, "isub",         0, -1, Opcode.Category.NORMAL, 4));
74         depthList[7] = new CurrentDepth(2, new Opcode(184, "invokestatic", 2,  0, Opcode.Category.INVOKE, 1));
75         depthList[8] = new CurrentDepth(1, new Opcode( 96, "iadd",         0, -1, Opcode.Category.NORMAL, 3));
76         depthList[9] = new CurrentDepth(0, new Opcode(172, "ireturn",      0, -1, Opcode.Category.NORMAL, 2));
77         StackPatternBasedBirthmarkElement pattern2 = new StackPatternBasedBirthmarkElement(depthList);
78
79         Assert.assertEquals(21, element.getWeight(pattern2));
80         Assert.assertEquals(21, pattern2.getWeight(element));
81     }
82 }