001package daikon.test; 002 003import static java.util.logging.Level.INFO; 004import static org.junit.Assert.assertFalse; 005import static org.junit.Assert.assertTrue; 006 007import daikon.*; 008import junit.framework.*; 009import org.junit.BeforeClass; 010import org.junit.Test; 011 012@SuppressWarnings("UnusedVariable") // test code 013public class VarComparabilityTest { 014 015 static final int NONE = VarComparability.NONE; 016 static final int IMPLICIT = VarComparability.IMPLICIT; 017 018 /** prepare for tests */ 019 @BeforeClass 020 public static void setUpClass() { 021 daikon.LogHelper.setupLogs(INFO); 022 FileIO.new_decl_format = true; 023 } 024 025 boolean comp(VarComparability v1, VarComparability v2) { 026 return VarComparability.comparable(v1, v2); 027 } 028 029 VarComparability parsei(String rep) { 030 // count number of dimensions 031 int dims = rep.split("\\[").length; 032 return parsei(rep, dims); 033 } 034 035 VarComparability parsei(String rep, int dims) { 036 String typerep = "int"; 037 for (int i = 0; i < dims; i++) { 038 typerep += "[]"; 039 } 040 ProglangType type = ProglangType.parse(typerep); 041 return VarComparability.parse(IMPLICIT, rep, type); 042 } 043 044 @Test 045 public void test_VarComparabilityImplicit_scalar() { 046 VarComparability v1 = parsei("1"); 047 VarComparability v1a = parsei("1"); 048 VarComparability v2 = parsei("2"); 049 VarComparability v_1 = parsei("-1"); 050 // VarComparability v_1a = parsei("-1"); 051 VarComparability v_2 = parsei("-2"); 052 VarComparability v_3 = parsei("-3"); 053 054 assertTrue(comp(v1, v1)); 055 assertTrue(comp(v1, v1a)); 056 assertTrue(comp(v1a, v1)); 057 assertFalse(comp(v1, v2)); 058 assertFalse(comp(v2, v1)); 059 assertTrue(comp(v2, v2)); 060 061 assertTrue(comp(v1, v_1)); 062 assertTrue(comp(v1a, v_1)); 063 assertTrue(comp(v2, v_1)); 064 assertTrue(comp(v_1, v_1)); 065 assertTrue(comp(v_2, v_1)); 066 assertTrue(comp(v_3, v_1)); 067 068 assertTrue(comp(v1, v_2)); 069 assertTrue(comp(v1a, v_2)); 070 assertTrue(comp(v2, v_2)); 071 assertTrue(comp(v_1, v_2)); 072 assertTrue(comp(v_2, v_2)); 073 assertTrue(comp(v_3, v_2)); 074 075 assertTrue(comp(v1, v_3)); 076 assertTrue(comp(v1a, v_3)); 077 assertTrue(comp(v2, v_3)); 078 assertTrue(comp(v_1, v_3)); 079 assertTrue(comp(v_2, v_3)); 080 assertTrue(comp(v_3, v_3)); 081 } 082 083 @Test 084 public void test_VarComparabilityImplicit_1Darray_parts() { 085 086 VarComparability v1 = parsei("1"); 087 VarComparability v1a = parsei("1"); 088 VarComparability v2 = parsei("2"); 089 VarComparability v_1 = parsei("-1"); 090 VarComparability v_1a = parsei("-1"); 091 VarComparability v_2 = parsei("-2"); 092 VarComparability v_3 = parsei("-3"); 093 094 VarComparability v12 = parsei("1[2]"); 095 VarComparability v12a = parsei("1[2]"); 096 VarComparability v13 = parsei("1[3]"); 097 VarComparability v13a = parsei("1[3]"); 098 VarComparability v23 = parsei("2[3]"); 099 VarComparability v23a = parsei("2[3]"); 100 VarComparability v1_1 = parsei("1[-1]"); 101 VarComparability v_12 = parsei("-1[2]"); 102 VarComparability v_1_1 = parsei("-1[-1]"); 103 104 assertTrue(comp(v1, v12.elementType())); 105 assertTrue(comp(v1, v13.elementType())); 106 assertFalse(comp(v1, v23.elementType())); 107 assertTrue(comp(v1, v1_1.elementType())); 108 assertTrue(comp(v1, v_1_1.elementType())); 109 assertFalse(comp(v1, v12.indexType(0))); 110 assertFalse(comp(v1, v13.indexType(0))); 111 assertFalse(comp(v1, v23.indexType(0))); 112 assertTrue(comp(v1, v1_1.indexType(0))); 113 assertTrue(comp(v1, v_1_1.indexType(0))); 114 115 assertFalse(comp(v2, v12.elementType())); 116 assertFalse(comp(v2, v13.elementType())); 117 assertTrue(comp(v2, v23.elementType())); 118 assertFalse(comp(v2, v1_1.elementType())); 119 assertTrue(comp(v2, v_1_1.elementType())); 120 assertTrue(comp(v2, v12.indexType(0))); 121 assertFalse(comp(v2, v13.indexType(0))); 122 assertFalse(comp(v2, v23.indexType(0))); 123 assertTrue(comp(v2, v1_1.indexType(0))); 124 assertTrue(comp(v2, v_1_1.indexType(0))); 125 } 126 127 @Test 128 public void test_VarComparabilityImplicit_1Darray_whole() { 129 VarComparability v12 = parsei("1[2]"); 130 VarComparability v12a = parsei("1[2]"); 131 VarComparability v13 = parsei("1[3]"); 132 VarComparability v13a = parsei("1[3]"); 133 VarComparability v23 = parsei("2[3]"); 134 VarComparability v23a = parsei("2[3]"); 135 VarComparability v1_1 = parsei("1[-1]"); 136 VarComparability v_12 = parsei("-1[2]"); 137 VarComparability v_1_1 = parsei("-1[-1]"); 138 139 assertTrue(comp(v12, v12)); 140 assertTrue(comp(v12, v12a)); 141 assertFalse(comp(v12, v13)); 142 assertFalse(comp(v12, v23)); 143 assertFalse(comp(v13, v12)); 144 assertTrue(comp(v13, v13)); 145 assertTrue(comp(v13, v13a)); 146 assertFalse(comp(v13, v23)); 147 assertFalse(comp(v23, v12)); 148 assertFalse(comp(v23, v13)); 149 assertTrue(comp(v23, v23)); 150 assertTrue(comp(v23, v23a)); 151 152 assertTrue(comp(v1_1, v12)); 153 assertTrue(comp(v1_1, v13)); 154 assertFalse(comp(v1_1, v23)); 155 assertTrue(comp(v1_1, v1_1)); 156 assertTrue(comp(v1_1, v_12)); 157 assertTrue(comp(v1_1, v_1_1)); 158 159 assertTrue(comp(v_12, v12)); 160 assertFalse(comp(v_12, v13)); 161 assertFalse(comp(v_12, v23)); 162 assertTrue(comp(v_12, v1_1)); 163 assertTrue(comp(v_12, v_12)); 164 assertTrue(comp(v_12, v_1_1)); 165 166 assertTrue(comp(v_1_1, v12)); 167 assertTrue(comp(v_1_1, v13)); 168 assertTrue(comp(v_1_1, v23)); 169 assertTrue(comp(v_1_1, v1_1)); 170 assertTrue(comp(v_1_1, v_12)); 171 assertTrue(comp(v_1_1, v_1_1)); 172 } 173 174 @Test 175 public void test_VarComparabilityImplicit_nDarray_whole() { 176 VarComparability v12 = parsei("1[2]"); 177 VarComparability v12a = parsei("1[2]"); 178 VarComparability v123 = parsei("1[2][3]"); 179 VarComparability v123a = parsei("1[2][3]"); 180 VarComparability v1234 = parsei("1[2][3][4]"); 181 VarComparability v1234a = parsei("1[2][3][4]"); 182 VarComparability v_34 = parsei("-3[4]"); 183 VarComparability v_234 = parsei("-2[3][4]"); 184 VarComparability v_1234 = parsei("-1[2][3][4]"); 185 VarComparability v_1 = parsei("-1"); 186 187 assertTrue(comp(v12, v12)); 188 assertTrue(comp(v123, v123)); 189 assertTrue(comp(v1234, v1234)); 190 assertTrue(comp(v12a, v12)); 191 assertFalse(comp(v12a, v123)); 192 assertFalse(comp(v12a, v1234)); 193 assertFalse(comp(v123a, v12)); 194 assertTrue(comp(v123a, v123)); 195 assertFalse(comp(v123a, v1234)); 196 assertFalse(comp(v1234a, v12)); 197 assertFalse(comp(v1234a, v123)); 198 assertTrue(comp(v1234a, v1234)); 199 200 assertTrue(comp(v12, v123.elementType())); 201 assertTrue(comp(v123, v1234.elementType())); 202 203 assertTrue(comp(v_1, v12)); 204 assertTrue(comp(v_1, v123)); 205 assertTrue(comp(v_1, v1234)); 206 207 assertFalse(comp(v_1234, v12)); 208 assertFalse(comp(v_1234, v123)); 209 assertTrue(comp(v_1234, v1234)); 210 211 assertFalse(comp(v_234, v12)); 212 assertFalse(comp(v_234, v123)); 213 assertTrue(comp(v_234, v1234)); 214 215 assertFalse(comp(v_34, v12)); 216 assertFalse(comp(v_34, v123)); 217 assertTrue(comp(v_34, v1234)); 218 } 219}