Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/MariaDB/storage/innobase/unittest/   (MariaDB Server Version 8.1-8.4©)  Datei vom 1.9.2026 mit Größe 2 kB image not shown  

Quelle  innodb_rbt-t.cc   Sprache: C

 

#include "tap.h"
#include "ut0rbt.h"
#include "ut0new.h"

const size_t alloc_max_retries= 0;
void os_thread_sleep(ulint) { abort(); }
void ut_dbg_assertion_failed(const char *, const char *, unsigned)
{ abort(); }
namespace ib { fatal_or_error::~fatal_or_error() { IF_WIN(__debugbreak(),abort()); } }
#ifdef UNIV_PFS_MEMORY
PSI_memory_key mem_key_other, mem_key_std;
PSI_memory_key ut_new_get_key_by_file(uint32_t) { return mem_key_std; }
#endif

static const uint64_t doc_ids[]=
{
  103571,     104018,     106821,     108647,     109352,     109379,
  110325,     122868,     210682130,  231275441,  234172769,  366236849,
  526467159,  1675241735, 1675243405, 1947751899, 1949940363, 2033691953,
  2148227299, 2256289791, 2294223591, 2367501260, 2792700091, 2792701220,
  2817121627, 2820680352, 2821165664, 3253312130, 3404918378, 3532599429,
  3538712078, 3539373037, 3546479309, 3566641838, 3580209634, 3580871267,
  3693930556, 3693932734, 3693932983, 3781949558, 3839877411, 3930968983
};

static int fts_doc_id_cmp(const void *p1, const void *p2)
{
  uint64_t a= *static_cast<const uint64_t*>(p1),
    b= *static_cast<const uint64_t*>(p2);
  return b > a ? -1 : a > b;
}


static int fts_doc_id_buggy_cmp(const void *p1, const void *p2)
{
  return int(*static_cast<const uint64_t*>(p1) -
             *static_cast<const uint64_t*>(p2));
}

typedef int (*comparator) (const void*, const void*);

static void rbt_populate(ib_rbt_t *rbt)
{
  ib_rbt_bound_t parent;
  for (const uint64_t &doc_id : doc_ids)
  {
    if (rbt_search(rbt, &parent, &doc_id))
      rbt_add_node(rbt, &parent, &doc_id);
  }
}

static void rbt_populate2(ib_rbt_t *rbt)
{
  for (const uint64_t &doc_id : doc_ids)
    rbt_insert(rbt, &doc_id, &doc_id);
}

static bool rbt_search_all(ib_rbt_t *rbt)
{
  ib_rbt_bound_t parent;
  for (const uint64_t &doc_id : doc_ids)
    if (rbt_search(rbt, &parent, &doc_id))
      return false;
  return true;
}

static void rbt_test(comparator cmp, bool buggy)
{
  ib_rbt_t *rbt= rbt_create(sizeof(uint64_t), cmp);
  rbt_populate(rbt);
  ok(rbt_search_all(rbt) != buggy, "search after populate");
  rbt_free(rbt);
  rbt= rbt_create(sizeof(uint64_t), cmp);
  rbt_populate2(rbt);
  ok(rbt_search_all(rbt) != buggy, "search after populate2");
  rbt_free(rbt);
}

int main ()
{
  rbt_test(fts_doc_id_buggy_cmp, true);
  rbt_test(fts_doc_id_cmp, false);
}

Messung V0.5 in Prozent
C=100 H=92 G=95

¤ Dauer der Verarbeitung: 0.12 Sekunden  (vorverarbeitet am  2026-10-08) ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

PVS Prover

Isabelle Prover

NIST Cobol Testsuite

Cephes Mathematical Library

Vienna Development Method

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.