You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
107 lines
2.7 KiB
107 lines
2.7 KiB
// Repro case for LKRhash Clear bug
|
|
|
|
#include <windows.h>
|
|
#include <stdlib.h>
|
|
#include <stdio.h>
|
|
#include <string.h>
|
|
|
|
|
|
#include "MinFan.h"
|
|
|
|
void
|
|
test(
|
|
int N)
|
|
{
|
|
printf("\nTest driver for LKRhash for wchar, %d\n", N);
|
|
|
|
// A case-senstive string-to-int map
|
|
CWcharHashTable map;
|
|
int index;
|
|
LK_RETCODE lkrc;
|
|
#ifdef LKR_DEPRECATED_ITERATORS
|
|
CWcharHashTable::CIterator iter;
|
|
#endif // LKR_DEPRECATED_ITERATORS
|
|
|
|
#if 1
|
|
// Some objects for the hash tables
|
|
printf("\tFirst Insertion Loop\n");
|
|
for ( index = 0; index < N; index++)
|
|
{
|
|
char buf[30];
|
|
sprintf(buf, "page%04d.htm", index);
|
|
VwrecordBase* psoRecord = new VwrecordBase(buf, index);
|
|
// printf("Insert1: pso is %s\n", psoRecord->getKey());
|
|
map.InsertRecord(psoRecord);
|
|
}
|
|
#endif
|
|
|
|
#ifdef LKR_DEPRECATED_ITERATORS
|
|
printf("\tFirst Iteration Loop\n");
|
|
for (lkrc = map.InitializeIterator(&iter);
|
|
lkrc == LK_SUCCESS;
|
|
lkrc = map.IncrementIterator(&iter))
|
|
{
|
|
const VwrecordBase* psoRecord = iter.Record();
|
|
// printf("Iterate1: pso is %s\n", psoRecord->getKey());
|
|
}
|
|
lkrc = map.CloseIterator(&iter);
|
|
#endif // LKR_DEPRECATED_ITERATORS
|
|
|
|
printf("\tAfter insertions, size of map is %d\n", map.Size());
|
|
|
|
map.Clear();
|
|
printf("\tAfter Clear(), size of map is %d\n", map.Size());
|
|
|
|
printf("\tSecond Insertion Loop\n");
|
|
for ( index = 0; index < N; index++)
|
|
{
|
|
char buf[30];
|
|
sprintf(buf, "page%4d", index);
|
|
VwrecordBase* psoRecord = new VwrecordBase(buf, index);
|
|
// printf("Insert2: pso is %s\n", psoRecord->getKey());
|
|
map.InsertRecord(psoRecord);
|
|
|
|
const VwrecordBase* psoRecord2;
|
|
lkrc = map.FindKey(buf, &psoRecord2);
|
|
// printf("FindKey(%s) returned %d, %p\n", buf, lkrc, psoRecord2);
|
|
map.AddRefRecord(psoRecord2, LKAR_EXPLICIT_RELEASE);
|
|
}
|
|
|
|
#ifdef LKR_DEPRECATED_ITERATORS
|
|
printf("\tSecond Iteration Loop\n");
|
|
for (index = 0, lkrc = map.InitializeIterator(&iter);
|
|
lkrc == LK_SUCCESS;
|
|
++index, lkrc = map.IncrementIterator(&iter))
|
|
{
|
|
const VwrecordBase* psoRecord = iter.Record();
|
|
// printf("Iterate2: %d, pso is %s\n", index, psoRecord->getKey());
|
|
}
|
|
lkrc = map.CloseIterator(&iter);
|
|
#endif // LKR_DEPRECATED_ITERATORS
|
|
|
|
printf("\tClearing again\n");
|
|
map.Clear();
|
|
|
|
printf("\tFinishing %d\n", N);
|
|
}
|
|
|
|
|
|
|
|
int __cdecl
|
|
main(
|
|
int argc,
|
|
char **argv)
|
|
{
|
|
#if 0
|
|
for (int i = 0; i < 200000; ++i)
|
|
test(i);
|
|
#endif
|
|
|
|
int N = 5092;
|
|
if (argc > 1)
|
|
N = atoi(argv[1]);
|
|
test(N);
|
|
|
|
return 0;
|
|
}
|
|
|