1
2
3
4
5
6
7
8
9
10
11 package psiprobe.tools;
12
13 import static org.junit.jupiter.api.Assertions.assertEquals;
14 import static org.junit.jupiter.api.Assertions.assertNull;
15 import static org.junit.jupiter.api.Assertions.assertTrue;
16
17 import java.util.HashSet;
18
19 import org.junit.jupiter.api.Assertions;
20 import org.junit.jupiter.api.Test;
21
22
23
24
25 class InstrumentsTests {
26
27
28
29
30 @Test
31 void objectTest() {
32 Object o = new Object();
33 long objectSize = Instruments.sizeOf(o);
34 Assertions.assertEquals(Instruments.SIZE_OBJECT, objectSize);
35 }
36
37
38
39
40 @Test
41 void booleanTest() {
42 boolean b = false;
43 long booleanSize = Instruments.sizeOf(Boolean.valueOf(b)) - Instruments.SIZE_OBJECT;
44 Assertions.assertEquals(Instruments.SIZE_BOOLEAN, booleanSize);
45 }
46
47
48
49
50 @Test
51 void byteTest() {
52 byte b = 0x00;
53 long byteSize = Instruments.sizeOf(Byte.valueOf(b)) - Instruments.SIZE_OBJECT;
54 Assertions.assertEquals(Instruments.SIZE_BYTE, byteSize);
55 }
56
57
58
59
60 @Test
61 void charTest() {
62 char c = '\0';
63 long charSize = Instruments.sizeOf(Character.valueOf(c)) - Instruments.SIZE_OBJECT;
64 Assertions.assertEquals(Instruments.SIZE_CHAR, charSize);
65 }
66
67
68
69
70 @Test
71 void shortTest() {
72 short s = 0;
73 long shortSize = Instruments.sizeOf(Short.valueOf(s)) - Instruments.SIZE_OBJECT;
74 Assertions.assertEquals(Instruments.SIZE_SHORT, shortSize);
75 }
76
77
78
79
80 @Test
81 void intTest() {
82 int i = 0;
83 long intSize = Instruments.sizeOf(Integer.valueOf(i)) - Instruments.SIZE_OBJECT;
84 Assertions.assertEquals(Instruments.SIZE_INT, intSize);
85 }
86
87
88
89
90 @Test
91 void longTest() {
92 long l = 0;
93 long longSize = Instruments.sizeOf(Long.valueOf(l)) - Instruments.SIZE_OBJECT;
94 Assertions.assertEquals(Instruments.SIZE_LONG, longSize);
95 }
96
97
98
99
100 @Test
101 void floatTest() {
102 float f = 0.0F;
103 long floatSize = Instruments.sizeOf(Float.valueOf(f)) - Instruments.SIZE_OBJECT;
104 Assertions.assertEquals(Instruments.SIZE_FLOAT, floatSize);
105 }
106
107
108
109
110 @Test
111 void doubleTest() {
112 double d = 0.0;
113 long doubleSize = Instruments.sizeOf(Double.valueOf(d)) - Instruments.SIZE_OBJECT;
114 Assertions.assertEquals(Instruments.SIZE_DOUBLE, doubleSize);
115 }
116
117 @Test
118 void testSizeOfNull() {
119
120 long size = Instruments.sizeOf(null);
121 assertEquals(0L, size);
122 }
123
124 @Test
125 void testSizeOfWithClassLoader() {
126 Object o = new Object();
127 long size = Instruments.sizeOf(o, o.getClass().getClassLoader());
128 assertTrue(size >= 0);
129 }
130
131 @Test
132 void testSizeOfWithPreexistingSet() {
133 Object o = new Object();
134 long size = Instruments.sizeOf(o, new HashSet<>());
135 assertTrue(size >= 0);
136 }
137
138 @Test
139 void testIsInitialized() {
140 assertTrue(Instruments.isInitialized());
141 }
142
143 @Test
144 void testGetFieldExisting() {
145
146 class Container {
147 String value = "hello";
148 }
149 Container c = new Container();
150 Object val = Instruments.getField(c, "value");
151 assertEquals("hello", val);
152 }
153
154 @Test
155 void testGetFieldNonExistent() {
156 Object o = new Object();
157 Object val = Instruments.getField(o, "nonExistentField");
158 assertNull(val);
159 }
160
161 @Test
162 void testFindFieldInSuperclass() {
163
164 class Parent {
165 String parentField = "parent";
166 }
167 class Child extends Parent {
168 String childField = "child";
169 }
170 Child child = new Child();
171 Object val = Instruments.getField(child, "parentField");
172 assertEquals("parent", val);
173 }
174
175 @Test
176 void testSizeOfPrimitiveIntArray() {
177 int[] arr = {1, 2, 3, 4, 5};
178 long size = Instruments.sizeOf(arr);
179
180 assertEquals(5 * Instruments.SIZE_INT, size);
181 }
182
183 @Test
184 void testSizeOfBooleanArray() {
185 boolean[] arr = {true, false, true};
186 long size = Instruments.sizeOf(arr);
187 assertEquals(3 * Instruments.SIZE_BOOLEAN, size);
188 }
189
190 @Test
191 void testSizeReferenceIsPositive() {
192 assertTrue(Instruments.SIZE_REFERENCE > 0);
193 }
194
195 @Test
196 void testSizeOfComplexObject() {
197
198 class SimpleData {
199 int x = 42;
200 long y = 100L;
201 }
202 SimpleData data = new SimpleData();
203 long size = Instruments.sizeOf(data);
204
205 assertTrue(size >= Instruments.SIZE_OBJECT + Instruments.SIZE_INT + Instruments.SIZE_LONG);
206 }
207 }