| Line | Source Code | Coverage | 
|---|
| 1 |   | - | 
| 2 |   | - | 
| 3 | namespace QIPAddressUtils {  | - | 
| 4 |   | - | 
| 5 | static QString number(quint8 val, int base = 10)  | - | 
| 6 | {  | - | 
| 7 |     QChar zero(0x30);  | - | 
| 8 |     return val ? qulltoa(val, base, zero) : zero; executed:  return val ? qulltoa(val, base, zero) : zero;Execution Count:3480   | 3480 | 
| 9 | }  | - | 
| 10 |   | - | 
| 11 | typedef QVarLengthArray<char, 64> Buffer;  | - | 
| 12 | static bool checkedToAscii(Buffer &buffer, const QChar *begin, const QChar *end)  | - | 
| 13 | {  | - | 
| 14 |     const ushort *const ubegin = reinterpret_cast<const ushort *>(begin);  | - | 
| 15 |     const ushort *const uend = reinterpret_cast<const ushort *>(end);  | - | 
| 16 |     const ushort *src = ubegin;  | - | 
| 17 |   | - | 
| 18 |     buffer.resize(uend - ubegin + 1);  | - | 
| 19 |     char *dst = buffer.data();  | - | 
| 20 |   | - | 
| 21 |     while (src != uend) { evaluated:  src != uend| yes Evaluation Count:262201  | yes Evaluation Count:17475  |  
   | 17475-262201 | 
| 22 |         if (*src >= 0x7f) evaluated:  *src >= 0x7f| yes Evaluation Count:199  | yes Evaluation Count:262034  |  
   | 199-262034 | 
| 23 |             return false; executed:  return false;Execution Count:199   | 199 | 
| 24 |         *dst++ = *src++;  | - | 
| 25 |     } executed:  }Execution Count:262069   | 262069 | 
| 26 |     *dst = '\0';  | - | 
| 27 |     return true; executed:  return true;Execution Count:17476   | 17476 | 
| 28 | }  | - | 
| 29 |   | - | 
| 30 | static bool parseIp4Internal(IPv4Address &address, const char *ptr, bool acceptLeadingZero);  | - | 
| 31 | bool parseIp4(IPv4Address &address, const QChar *begin, const QChar *end)  | - | 
| 32 | {  | - | 
| 33 |     qt_noop();  | - | 
| 34 |     Buffer buffer;  | - | 
| 35 |     if (!checkedToAscii(buffer, begin, end)) evaluated:  !checkedToAscii(buffer, begin, end)| yes Evaluation Count:199  | yes Evaluation Count:17140  |  
   | 199-17140 | 
| 36 |         return false; executed:  return false;Execution Count:199   | 199 | 
| 37 |   | - | 
| 38 |     const char *ptr = buffer.data();  | - | 
| 39 |     return parseIp4Internal(address, ptr, true); executed:  return parseIp4Internal(address, ptr, true);Execution Count:17140   | 17140 | 
| 40 | }  | - | 
| 41 |   | - | 
| 42 | static bool parseIp4Internal(IPv4Address &address, const char *ptr, bool acceptLeadingZero)  | - | 
| 43 | {  | - | 
| 44 |     address = 0;  | - | 
| 45 |     int dotCount = 0;  | - | 
| 46 |     while (dotCount < 4) { partially evaluated:  dotCount < 4| yes Evaluation Count:22535  | no Evaluation Count:0  |  
   | 0-22535 | 
| 47 |         if (!acceptLeadingZero && *ptr == '0' && evaluated:  !acceptLeadingZero| yes Evaluation Count:148  | yes Evaluation Count:22383  |  
  evaluated:  *ptr == '0'| yes Evaluation Count:32  | yes Evaluation Count:116  |  
   | 32-22383 | 
| 48 |                 ptr[1] != '.' && ptr[1] != '\0') evaluated:  ptr[1] != '.'| yes Evaluation Count:3  | yes Evaluation Count:29  |  
  partially evaluated:  ptr[1] != '\0'| no Evaluation Count:0  | yes Evaluation Count:3  |  
   | 0-29 | 
| 49 |             return false; never executed: return false;  | 0 | 
| 50 |   | - | 
| 51 |         const char *endptr;  | - | 
| 52 |         bool ok;  | - | 
| 53 |         quint64 ll = qstrtoull(ptr, &endptr, 0, &ok);  | - | 
| 54 |         quint32 x = ll;  | - | 
| 55 |         if (!ok || endptr == ptr || ll != x) evaluated:  !ok| yes Evaluation Count:15311  | yes Evaluation Count:7137  |  
  partially evaluated:  endptr == ptr| no Evaluation Count:0  | yes Evaluation Count:7137  |  
  partially evaluated:  ll != x| no Evaluation Count:0  | yes Evaluation Count:7137  |  
   | 0-15311 | 
| 56 |             return false; executed:  return false;Execution Count:15298   | 15298 | 
| 57 |   | - | 
| 58 |         if (*endptr == '.' || dotCount == 3) { evaluated:  *endptr == '.'| yes Evaluation Count:5317  | yes Evaluation Count:1821  |  
  evaluated:  dotCount == 3| yes Evaluation Count:1770  | yes Evaluation Count:51  |  
   | 51-5317 | 
| 59 |             if (x & ~0xff) evaluated:  x & ~0xff| yes Evaluation Count:3  | yes Evaluation Count:7083  |  
   | 3-7083 | 
| 60 |                 return false; executed:  return false;Execution Count:3   | 3 | 
| 61 |             address <<= 8;  | - | 
| 62 |         } else if (dotCount == 2) { evaluated:  dotCount == 2| yes Evaluation Count:12  | yes Evaluation Count:39  |  
  executed:  }Execution Count:7083   | 12-7083 | 
| 63 |             if (x & ~0xffff) partially evaluated:  x & ~0xffff| no Evaluation Count:0  | yes Evaluation Count:12  |  
   | 0-12 | 
| 64 |                 return false; never executed: return false;  | 0 | 
| 65 |             address <<= 16;  | - | 
| 66 |         } else if (dotCount == 1) { executed:  }Execution Count:12  evaluated:  dotCount == 1| yes Evaluation Count:14  | yes Evaluation Count:25  |  
   | 12-25 | 
| 67 |             if (x & ~0xffffff) partially evaluated:  x & ~0xffffff| no Evaluation Count:0  | yes Evaluation Count:14  |  
   | 0-14 | 
| 68 |                 return false; never executed: return false;  | 0 | 
| 69 |             address <<= 24;  | - | 
| 70 |         } executed:  }Execution Count:14   | 14 | 
| 71 |         address |= x;  | - | 
| 72 |   | - | 
| 73 |         if (dotCount == 3 && *endptr != '\0') evaluated:  dotCount == 3| yes Evaluation Count:1776  | yes Evaluation Count:5359  |  
  evaluated:  *endptr != '\0'| yes Evaluation Count:19  | yes Evaluation Count:1757  |  
   | 19-5359 | 
| 74 |             return false; executed:  return false;Execution Count:19   | 19 | 
| 75 |         else if (dotCount == 3 || *endptr == '\0') evaluated:  dotCount == 3| yes Evaluation Count:1757  | yes Evaluation Count:5359  |  
  evaluated:  *endptr == '\0'| yes Evaluation Count:5  | yes Evaluation Count:5354  |  
   | 5-5359 | 
| 76 |             return true; executed:  return true;Execution Count:1762   | 1762 | 
| 77 |         ++dotCount;  | - | 
| 78 |         ptr = endptr + 1;  | - | 
| 79 |     } executed:  }Execution Count:5354   | 5354 | 
| 80 |     return false; never executed: return false;  | 0 | 
| 81 | }  | - | 
| 82 |   | - | 
| 83 | void toString(QString &appendTo, IPv4Address address)  | - | 
| 84 | {  | - | 
| 85 |   | - | 
| 86 |   | - | 
| 87 |     appendTo += number(address >> 24)  | - | 
| 88 |                 % QLatin1Char('.')  | - | 
| 89 |                 % number(address >> 16)  | - | 
| 90 |                 % QLatin1Char('.')  | - | 
| 91 |                 % number(address >> 8)  | - | 
| 92 |                 % QLatin1Char('.')  | - | 
| 93 |                 % number(address);  | - | 
| 94 | } executed:  }Execution Count:870   | 870 | 
| 95 |   | - | 
| 96 | bool parseIp6(IPv6Address &address, const QChar *begin, const QChar *end)  | - | 
| 97 | {  | - | 
| 98 |     qt_noop();  | - | 
| 99 |     Buffer buffer;  | - | 
| 100 |     if (!checkedToAscii(buffer, begin, end)) partially evaluated:  !checkedToAscii(buffer, begin, end)| no Evaluation Count:0  | yes Evaluation Count:336  |  
   | 0-336 | 
| 101 |         return false; never executed: return false;  | 0 | 
| 102 |   | - | 
| 103 |     const char *ptr = buffer.data();  | - | 
| 104 |   | - | 
| 105 |   | - | 
| 106 |     int colonCount = 0;  | - | 
| 107 |     int dotCount = 0;  | - | 
| 108 |     while (*ptr) { evaluated:  *ptr| yes Evaluation Count:5194  | yes Evaluation Count:336  |  
   | 336-5194 | 
| 109 |         if (*ptr == ':') evaluated:  *ptr == ':'| yes Evaluation Count:1312  | yes Evaluation Count:3882  |  
   | 1312-3882 | 
| 110 |             ++colonCount; executed:  ++colonCount;Execution Count:1312   | 1312 | 
| 111 |         if (*ptr == '.') evaluated:  *ptr == '.'| yes Evaluation Count:165  | yes Evaluation Count:5029  |  
   | 165-5029 | 
| 112 |             ++dotCount; executed:  ++dotCount;Execution Count:165   | 165 | 
| 113 |         ++ptr;  | - | 
| 114 |     } executed:  }Execution Count:5194   | 5194 | 
| 115 |   | - | 
| 116 |     if (dotCount != 0 && dotCount != 3) evaluated:  dotCount != 0| yes Evaluation Count:55  | yes Evaluation Count:281  |  
  evaluated:  dotCount != 3| yes Evaluation Count:5  | yes Evaluation Count:50  |  
   | 5-281 | 
| 117 |         return false; executed:  return false;Execution Count:5   | 5 | 
| 118 |   | - | 
| 119 |     memset(address, 0, sizeof address);  | - | 
| 120 |     if (colonCount == 2 && end - begin == 2) evaluated:  colonCount == 2| yes Evaluation Count:123  | yes Evaluation Count:208  |  
  evaluated:  end - begin == 2| yes Evaluation Count:14  | yes Evaluation Count:109  |  
   | 14-208 | 
| 121 |         return true; executed:  return true;Execution Count:14   | 14 | 
| 122 |   | - | 
| 123 |   | - | 
| 124 |     int zeroWordsToFill;  | - | 
| 125 |     ptr = buffer.data();  | - | 
| 126 |   | - | 
| 127 |   | - | 
| 128 |   | - | 
| 129 |     if ((ptr[0] == ':' && ptr[1] == ':') || evaluated:  ptr[0] == ':'| yes Evaluation Count:115  | yes Evaluation Count:202  |  
  evaluated:  ptr[1] == ':'| yes Evaluation Count:110  | yes Evaluation Count:5  |  
   | 5-202 | 
| 130 |             (ptr[end - begin - 2] == ':' && ptr[end - begin - 1] == ':')) { evaluated:  ptr[end - begin - 2] == ':'| yes Evaluation Count:88  | yes Evaluation Count:119  |  
  evaluated:  ptr[end - begin - 1] == ':'| yes Evaluation Count:51  | yes Evaluation Count:37  |  
   | 37-119 | 
| 131 |         zeroWordsToFill = 9 - colonCount;  | - | 
| 132 |     } else if (colonCount < 2 || colonCount > 7) { evaluated:  colonCount < 2| yes Evaluation Count:12  | yes Evaluation Count:144  |  
  evaluated:  colonCount > 7| yes Evaluation Count:2  | yes Evaluation Count:142  |  
  executed:  }Execution Count:161   | 2-161 | 
| 133 |         return false; executed:  return false;Execution Count:14   | 14 | 
| 134 |     } else {  | - | 
| 135 |         zeroWordsToFill = 8 - colonCount;  | - | 
| 136 |     } executed:  }Execution Count:142   | 142 | 
| 137 |     if (dotCount) evaluated:  dotCount| yes Evaluation Count:47  | yes Evaluation Count:256  |  
   | 47-256 | 
| 138 |         --zeroWordsToFill; executed:  --zeroWordsToFill;Execution Count:47   | 47 | 
| 139 |   | - | 
| 140 |     int pos = 0;  | - | 
| 141 |     while (pos < 15) { evaluated:  pos < 15| yes Evaluation Count:1349  | yes Evaluation Count:45  |  
   | 45-1349 | 
| 142 |         const char *endptr;  | - | 
| 143 |         bool ok;  | - | 
| 144 |         quint64 ll = qstrtoull(ptr, &endptr, 16, &ok);  | - | 
| 145 |         quint16 x = ll;  | - | 
| 146 |   | - | 
| 147 |         if (ptr == endptr) { evaluated:  ptr == endptr| yes Evaluation Count:258  | yes Evaluation Count:1091  |  
   | 258-1091 | 
| 148 |   | - | 
| 149 |             if (zeroWordsToFill < 1) evaluated:  zeroWordsToFill < 1| yes Evaluation Count:23  | yes Evaluation Count:235  |  
   | 23-235 | 
| 150 |                 return false; executed:  return false;Execution Count:23   | 23 | 
| 151 |             if (pos == 0 || pos == colonCount * 2) { evaluated:  pos == 0| yes Evaluation Count:112  | yes Evaluation Count:123  |  
  partially evaluated:  pos == colonCount * 2| no Evaluation Count:0  | yes Evaluation Count:123  |  
   | 0-123 | 
| 152 |                 if (ptr[0] == '\0' || ptr[1] != ':') partially evaluated:  ptr[0] == '\0'| no Evaluation Count:0  | yes Evaluation Count:112  |  
  evaluated:  ptr[1] != ':'| yes Evaluation Count:2  | yes Evaluation Count:110  |  
   | 0-112 | 
| 153 |                     return false; executed:  return false;Execution Count:2   | 2 | 
| 154 |                 ++ptr;  | - | 
| 155 |             } executed:  }Execution Count:110   | 110 | 
| 156 |             pos += zeroWordsToFill * 2;  | - | 
| 157 |             zeroWordsToFill = 0;  | - | 
| 158 |             ++ptr;  | - | 
| 159 |             continue; executed:  continue;Execution Count:233   | 233 | 
| 160 |         }  | - | 
| 161 |         if (!ok || ll != x) partially evaluated:  !ok| no Evaluation Count:0  | yes Evaluation Count:1091  |  
  evaluated:  ll != x| yes Evaluation Count:4  | yes Evaluation Count:1087  |  
   | 0-1091 | 
| 162 |             return false; executed:  return false;Execution Count:4   | 4 | 
| 163 |   | - | 
| 164 |         if (*endptr == '.') { evaluated:  *endptr == '.'| yes Evaluation Count:41  | yes Evaluation Count:1046  |  
   | 41-1046 | 
| 165 |   | - | 
| 166 |   | - | 
| 167 |             if (pos != 12) evaluated:  pos != 12| yes Evaluation Count:4  | yes Evaluation Count:37  |  
   | 4-37 | 
| 168 |                 return false; executed:  return false;Execution Count:4   | 4 | 
| 169 |   | - | 
| 170 |             IPv4Address ip4;  | - | 
| 171 |             if (!parseIp4Internal(ip4, ptr, false)) partially evaluated:  !parseIp4Internal(ip4, ptr, false)| no Evaluation Count:0  | yes Evaluation Count:37  |  
   | 0-37 | 
| 172 |                 return false; never executed: return false;  | 0 | 
| 173 |   | - | 
| 174 |             address[12] = ip4 >> 24;  | - | 
| 175 |             address[13] = ip4 >> 16;  | - | 
| 176 |             address[14] = ip4 >> 8;  | - | 
| 177 |             address[15] = ip4;  | - | 
| 178 |             return true; executed:  return true;Execution Count:37   | 37 | 
| 179 |         }  | - | 
| 180 |   | - | 
| 181 |         address[pos++] = x >> 8;  | - | 
| 182 |         address[pos++] = x & 0xff;  | - | 
| 183 |   | - | 
| 184 |         if (*endptr == '\0') evaluated:  *endptr == '\0'| yes Evaluation Count:167  | yes Evaluation Count:879  |  
   | 167-879 | 
| 185 |             break; executed:  break;Execution Count:167   | 167 | 
| 186 |         if (*endptr != ':') evaluated:  *endptr != ':'| yes Evaluation Count:21  | yes Evaluation Count:858  |  
   | 21-858 | 
| 187 |             return false; executed:  return false;Execution Count:21   | 21 | 
| 188 |         ptr = endptr + 1;  | - | 
| 189 |     } executed:  }Execution Count:858   | 858 | 
| 190 |     return pos == 16; executed:  return pos == 16;Execution Count:212   | 212 | 
| 191 | }  | - | 
| 192 |   | - | 
| 193 | static inline QChar toHex(uchar c)  | - | 
| 194 | {  | - | 
| 195 |     return ushort(c > 9 ? c + 'a' - 0xA : c + '0'); executed:  return ushort(c > 9 ? c + 'a' - 0xA : c + '0');Execution Count:2184   | 2184 | 
| 196 | }  | - | 
| 197 |   | - | 
| 198 | void toString(QString &appendTo, IPv6Address address)  | - | 
| 199 | {  | - | 
| 200 |   | - | 
| 201 |   | - | 
| 202 |   | - | 
| 203 |   | - | 
| 204 |   | - | 
| 205 |   | - | 
| 206 |   | - | 
| 207 |     static const int Ip6AddressMaxLen = sizeof "1111:2222:3333:4444:5555:6666:7777:8888";  | - | 
| 208 |     static const int Ip6WithIp4AddressMaxLen = sizeof "::ffff:255.255.255.255";  | - | 
| 209 |   | - | 
| 210 |   | - | 
| 211 |     const quint64 zeroes[] = { 0, 0 };  | - | 
| 212 |     bool embeddedIp4 = false;  | - | 
| 213 |   | - | 
| 214 |   | - | 
| 215 |   | - | 
| 216 |   | - | 
| 217 |     if (memcmp(address, zeroes, 10) == 0) { evaluated:  memcmp(address, zeroes, 10) == 0| yes Evaluation Count:84  | yes Evaluation Count:133  |  
   | 84-133 | 
| 218 |         if (address[10] == 0xff && address[11] == 0xff) { evaluated:  address[10] == 0xff| yes Evaluation Count:17  | yes Evaluation Count:67  |  
  partially evaluated:  address[11] == 0xff| yes Evaluation Count:17  | no Evaluation Count:0  |  
   | 0-67 | 
| 219 |             embeddedIp4 = true;  | - | 
| 220 |         } else if (address[10] == 0 && address[11] == 0) { partially evaluated:  address[10] == 0| yes Evaluation Count:67  | no Evaluation Count:0  |  
  partially evaluated:  address[11] == 0| yes Evaluation Count:67  | no Evaluation Count:0  |  
  executed:  }Execution Count:17   | 0-67 | 
| 221 |             if (address[12] != 0 || address[13] != 0 || address[14] != 0) { evaluated:  address[12] != 0| yes Evaluation Count:5  | yes Evaluation Count:62  |  
  partially evaluated:  address[13] != 0| no Evaluation Count:0  | yes Evaluation Count:62  |  
  partially evaluated:  address[14] != 0| no Evaluation Count:0  | yes Evaluation Count:62  |  
   | 0-62 | 
| 222 |                 embeddedIp4 = true;  | - | 
| 223 |             } else if (address[15] == 0) { executed:  }Execution Count:5  evaluated:  address[15] == 0| yes Evaluation Count:31  | yes Evaluation Count:31  |  
   | 5-31 | 
| 224 |                 appendTo.append(QLatin1String("::"));  | - | 
| 225 |                 return; executed:  return;Execution Count:31   | 31 | 
| 226 |             }  | - | 
| 227 |         }  | - | 
| 228 |     }  | - | 
| 229 |   | - | 
| 230 |   | - | 
| 231 |     appendTo.reserve(appendTo.size() +  | - | 
| 232 |                      (embeddedIp4 ? Ip6WithIp4AddressMaxLen : Ip6AddressMaxLen));  | - | 
| 233 |   | - | 
| 234 |   | - | 
| 235 |     int zeroRunLength = 0;  | - | 
| 236 |     int zeroRunOffset = 0;  | - | 
| 237 |     for (int i = 0; i < 16; i += 2) { evaluated:  i < 16| yes Evaluation Count:827  | yes Evaluation Count:186  |  
   | 186-827 | 
| 238 |         if (address[i] == 0 && address[i + 1] == 0) { evaluated:  address[i] == 0| yes Evaluation Count:438  | yes Evaluation Count:389  |  
  evaluated:  address[i + 1] == 0| yes Evaluation Count:196  | yes Evaluation Count:242  |  
   | 196-438 | 
| 239 |   | - | 
| 240 |             int j;  | - | 
| 241 |             for (j = i; j < 16; j += 2) { evaluated:  j < 16| yes Evaluation Count:869  | yes Evaluation Count:43  |  
   | 43-869 | 
| 242 |                 if (address[j] != 0 || address[j+1] != 0) evaluated:  address[j] != 0| yes Evaluation Count:59  | yes Evaluation Count:810  |  
  evaluated:  address[j+1] != 0| yes Evaluation Count:94  | yes Evaluation Count:716  |  
   | 59-810 | 
| 243 |                     break; executed:  break;Execution Count:153   | 153 | 
| 244 |             } executed:  }Execution Count:716   | 716 | 
| 245 |   | - | 
| 246 |             if (j - i > zeroRunLength) { evaluated:  j - i > zeroRunLength| yes Evaluation Count:178  | yes Evaluation Count:18  |  
   | 18-178 | 
| 247 |                 zeroRunLength = j - i;  | - | 
| 248 |                 zeroRunOffset = i;  | - | 
| 249 |                 i = j;  | - | 
| 250 |             } executed:  }Execution Count:178   | 178 | 
| 251 |         } executed:  }Execution Count:196   | 196 | 
| 252 |     } executed:  }Execution Count:827   | 827 | 
| 253 |   | - | 
| 254 |     const QChar colon = ushort(':');  | - | 
| 255 |     if (zeroRunLength < 4) evaluated:  zeroRunLength < 4| yes Evaluation Count:47  | yes Evaluation Count:139  |  
   | 47-139 | 
| 256 |         zeroRunOffset = -1; executed:  zeroRunOffset = -1;Execution Count:47   | 47 | 
| 257 |     else if (zeroRunOffset == 0) evaluated:  zeroRunOffset == 0| yes Evaluation Count:53  | yes Evaluation Count:86  |  
   | 53-86 | 
| 258 |         appendTo.append(colon); executed:  appendTo.append(colon);Execution Count:53   | 53 | 
| 259 |   | - | 
| 260 |     for (int i = 0; i < 16; i += 2) { evaluated:  i < 16| yes Evaluation Count:948  | yes Evaluation Count:164  |  
   | 164-948 | 
| 261 |         if (i == zeroRunOffset) { evaluated:  i == zeroRunOffset| yes Evaluation Count:139  | yes Evaluation Count:809  |  
   | 139-809 | 
| 262 |             appendTo.append(colon);  | - | 
| 263 |             i += zeroRunLength - 2;  | - | 
| 264 |             continue; executed:  continue;Execution Count:139   | 139 | 
| 265 |         }  | - | 
| 266 |   | - | 
| 267 |         if (i == 12 && embeddedIp4) { evaluated:  i == 12| yes Evaluation Count:122  | yes Evaluation Count:687  |  
  evaluated:  embeddedIp4| yes Evaluation Count:22  | yes Evaluation Count:100  |  
   | 22-687 | 
| 268 |             IPv4Address ip4 = address[12] << 24 |  | - | 
| 269 |                               address[13] << 16 |  | - | 
| 270 |                               address[14] << 8 |  | - | 
| 271 |                               address[15];  | - | 
| 272 |             toString(appendTo, ip4);  | - | 
| 273 |             return; executed:  return;Execution Count:22   | 22 | 
| 274 |         }  | - | 
| 275 |   | - | 
| 276 |         if (address[i]) { evaluated:  address[i]| yes Evaluation Count:408  | yes Evaluation Count:379  |  
   | 379-408 | 
| 277 |             if (address[i] >> 4) { evaluated:  address[i] >> 4| yes Evaluation Count:363  | yes Evaluation Count:45  |  
   | 45-363 | 
| 278 |                 appendTo.append(toHex(address[i] >> 4));  | - | 
| 279 |                 appendTo.append(toHex(address[i] & 0xf));  | - | 
| 280 |                 appendTo.append(toHex(address[i + 1] >> 4));  | - | 
| 281 |                 appendTo.append(toHex(address[i + 1] & 0xf));  | - | 
| 282 |             } else if (address[i] & 0xf) { executed:  }Execution Count:363  partially evaluated:  address[i] & 0xf| yes Evaluation Count:45  | no Evaluation Count:0  |  
   | 0-363 | 
| 283 |                 appendTo.append(toHex(address[i] & 0xf));  | - | 
| 284 |                 appendTo.append(toHex(address[i + 1] >> 4));  | - | 
| 285 |                 appendTo.append(toHex(address[i + 1] & 0xf));  | - | 
| 286 |             } executed:  }Execution Count:45   | 45 | 
| 287 |         } else if (address[i + 1] >> 4) { evaluated:  address[i + 1] >> 4| yes Evaluation Count:218  | yes Evaluation Count:161  |  
   | 161-218 | 
| 288 |             appendTo.append(toHex(address[i + 1] >> 4));  | - | 
| 289 |             appendTo.append(toHex(address[i + 1] & 0xf));  | - | 
| 290 |         } else { executed:  }Execution Count:218   | 218 | 
| 291 |             appendTo.append(toHex(address[i + 1] & 0xf));  | - | 
| 292 |         } executed:  }Execution Count:161   | 161 | 
| 293 |   | - | 
| 294 |         if (i != 14) evaluated:  i != 14| yes Evaluation Count:654  | yes Evaluation Count:133  |  
   | 133-654 | 
| 295 |             appendTo.append(colon); executed:  appendTo.append(colon);Execution Count:654   | 654 | 
| 296 |     } executed:  }Execution Count:787   | 787 | 
| 297 | } executed:  }Execution Count:164   | 164 | 
| 298 |   | - | 
| 299 | }  | - | 
| 300 |   | - | 
| 301 |   | - | 
 |  |  |