Пример #1
0
void RunCmpBufferAlignTest(
    size_t max_test_size, void (*test_cmp_func)(uint8_t*, uint8_t*, size_t),
    void (*test_miscmp_func)(uint8_t*, uint8_t*, size_t, size_t),
    size_t (*set_incr)(size_t)) {
  if (!set_incr) {
    set_incr = SetIncrement;
  }

  // Allocate two large buffers for all of the testing.
  uint8_t* buf1 = new uint8_t[3*max_test_size];
  uint8_t* buf2 = new uint8_t[3*max_test_size];

  uint8_t* buf1_align;
  uint8_t* buf2_align;
  for (size_t i = 0; i < g_double_aligns_len; i++) {
    size_t incr = 1;
    for (size_t len = 0; len <= max_test_size; len += incr) {
      incr = set_incr(len);

      buf1_align =
          reinterpret_cast<uint8_t*>(GetAlignedPtr(
              buf1, g_double_aligns[i][0], g_double_aligns[i][1]));
      buf2_align =
          reinterpret_cast<uint8_t*>(GetAlignedPtr(
              buf2, g_double_aligns[i][2], g_double_aligns[i][3]));

      // Check by putting all zeroes after both buffers.
      memset(buf1_align+len, 0, 32);
      memset(buf2_align+len, 0, 32);
      test_cmp_func(buf1_align, buf2_align, len);

      // Check by putting different values after both buffers.
      for (size_t j = 0; j < 32; j++) {
        buf1_align[len+j] = j;
        buf2_align[len+j] = j+1;
      }
      test_cmp_func(buf1_align, buf2_align, len);

      if (len > 0) {
        // Change the lengths of the buffers and verify that there are
        // miscompares.
        for (size_t len2 = len+1; len2 < len+32; len2++) {
          test_miscmp_func(buf1_align, buf2_align, len, len2);
          test_miscmp_func(buf1_align, buf2_align, len2, len);
        }
      }
    }
  }
  delete buf1;
  delete buf2;
}
Пример #2
0
void RunSingleBufferAlignTest(
    size_t max_test_size, void (*test_func)(uint8_t*, size_t),
    size_t (*set_incr)(size_t)) {
  if (!set_incr) {
    set_incr = SetIncrement;
  }

  // Allocate one large buffer with lots of extra space so that we can
  // guarantee that the all possible alignments will fit.
  uint8_t *buf = new uint8_t[3*max_test_size];

  uint8_t *buf_align;
  for (size_t i = 0; i < g_single_aligns_len; i++) {
    size_t incr = 1;
    for (size_t len = 0; len <= max_test_size; len += incr) {
      incr = set_incr(len);

      buf_align = reinterpret_cast<uint8_t*>(GetAlignedPtr(
          buf+FENCEPOST_LENGTH, g_single_aligns[i][0], g_single_aligns[i][1]));

      SetFencepost(&buf_align[-FENCEPOST_LENGTH]);
      SetFencepost(&buf_align[len]);

      test_func(buf_align, len);

      VerifyFencepost(&buf_align[-FENCEPOST_LENGTH]);
      VerifyFencepost(&buf_align[len]);
    }
  }
  delete buf;
}
Пример #3
0
void RunSrcDstBufferAlignTest(
    size_t max_test_size, void (*test_func)(uint8_t*, uint8_t*, size_t),
    size_t (*set_incr)(size_t)) {
  if (!set_incr) {
    set_incr = SetIncrement;
  }

  // Allocate two large buffers for all of the testing.
  uint8_t* src = new uint8_t[3*max_test_size];
  uint8_t* dst = new uint8_t[3*max_test_size];

  uint8_t* src_align;
  uint8_t* dst_align;
  for (size_t i = 0; i < g_double_aligns_len; i++) {
    size_t incr = 1;
    for (size_t len = 0; len <= max_test_size; len += incr) {
      incr = set_incr(len);

      src_align =
          reinterpret_cast<uint8_t*>(GetAlignedPtr(
              src+FENCEPOST_LENGTH, g_double_aligns[i][0], g_double_aligns[i][1]));
      dst_align =
          reinterpret_cast<uint8_t*>(GetAlignedPtr(
              dst+FENCEPOST_LENGTH, g_double_aligns[i][2], g_double_aligns[i][3]));
      SetFencepost(&dst_align[-FENCEPOST_LENGTH]);
      SetFencepost(&dst_align[len]);

      test_func(src_align, dst_align, len);

      VerifyFencepost(&dst_align[-FENCEPOST_LENGTH]);
      VerifyFencepost(&dst_align[len]);
    }
  }
  delete src;
  delete dst;
}
Пример #4
0
char* GetAlignedPtrFilled(std::vector<char>* buf, size_t alignment, size_t nbytes, char fill_byte) {
  char* buf_aligned = GetAlignedPtr(buf, alignment, nbytes);
  memset(buf_aligned, fill_byte, nbytes);
  return buf_aligned;
}