summaryrefslogtreecommitdiffstats
path: root/akregator/src/mk4storage/metakit/tests/regress.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'akregator/src/mk4storage/metakit/tests/regress.cpp')
-rw-r--r--akregator/src/mk4storage/metakit/tests/regress.cpp269
1 files changed, 269 insertions, 0 deletions
diff --git a/akregator/src/mk4storage/metakit/tests/regress.cpp b/akregator/src/mk4storage/metakit/tests/regress.cpp
new file mode 100644
index 000000000..0725f57f5
--- /dev/null
+++ b/akregator/src/mk4storage/metakit/tests/regress.cpp
@@ -0,0 +1,269 @@
+// regress.cpp -- Regression test program, main code
+// $Id$
+// This is part of Metakit, the homepage is http://www.equi4.com/metakit/
+
+#include "regress.h"
+
+#if defined (macintosh)
+ #include <SIOUX.h>
+ #ifdef DEBUG_NEW
+ #include <DebugNew.cp>
+ //#include "ZoneRanger.c"
+ #if DEBUG_NEW >= 2 && !defined (q4_MAC_LEAK_CHECK)
+ #define q4_MAC_LEAK_CHECK 1
+ #endif
+ #endif
+#endif
+
+#if __profile__
+ #define q4_MWCW_PROFILER 1
+ #include <profiler.h>
+#endif
+
+#if q4_NOTHROW
+ const char* msg;
+#endif
+
+#if _WIN32_WCE
+
+#define WIN32_LEAN_AND_MEAN
+#include <windows.h>
+
+int remove(const char* fn_)
+{
+ c4_Bytes buffer;
+ int n = MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, fn_, -1, NULL, 0);
+ wchar_t* w = (wchar_t*) buffer.SetBufferClear((n+1) * sizeof (wchar_t));
+ MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, fn_, -1, w, n);
+ return DeleteFile((wchar_t*) buffer.Contents()) ? 0 : -1;
+}
+
+#endif
+
+int
+#if _WIN32_WCE
+_cdecl
+#endif
+main()
+{
+// afxMemDF |= allocMemDF | checkAlwaysMemDF;
+
+ // The M4STRING package sometimes keeps a spare empty string around.
+ // By allocating it here, we avoid a few bogus memory leak reports.
+ c4_String empty;
+
+ #if q4_MAC_LEAK_CHECK
+ DebugNewForgetLeaks();
+ #endif
+
+#if q4_MWCW_PROFILER
+ if (!ProfilerInit(collectDetailed, bestTimeBase, 20, 5))
+ {
+#endif
+ TestBasics1();
+ TestBasics2();
+ TestNotify();
+ TestCustom1();
+ TestCustom2();
+ TestResize();
+ TestStores1();
+ TestStores2();
+ TestStores3();
+ TestStores4();
+ TestStores5();
+ TestDiffer();
+ TestExtend();
+ TestFormat();
+ TestMapped();
+ TestLimits();
+
+#if q4_MWCW_PROFILER
+ ProfilerDump("\pRegress.prof");
+ ProfilerTerm();
+ }
+#endif
+
+ #if defined (_DEBUG)
+ fputs("\nPress return... ", stderr);
+ getchar();
+ #endif
+ #if q4_MAC_LEAK_CHECK
+ if (DebugNewReportLeaks())
+ fputs(" *** Memory leaks found ***\n", stderr);
+ #endif
+ #if defined (macintosh)
+ SIOUXSettings.asktosaveonclose = false;
+ #endif
+
+ fputs("Done.\n", stderr);
+ return 0;
+}
+
+// Recursively display the entire view contents. The results shown do not
+// depend on file layout (free space, file positions, flat vs. on-demand).
+
+static void ViewDisplay(const c4_View& v_, FILE* fp, int l_ =0)
+{
+ c4_String types;
+ bool hasData = false, hasSubs = false;
+
+ // display header info and collect all data types
+ fprintf(fp, "%*s VIEW %5d rows =", l_, "", v_.GetSize());
+ for (int n = 0; n < v_.NumProperties(); ++n)
+ {
+ c4_Property prop = v_.NthProperty(n);
+ char t = prop.Type();
+
+ fprintf(fp, " %s:%c", (const char*) prop.Name(), t);
+
+ types += t;
+
+ if (t == 'V')
+ hasSubs = true;
+ else
+ hasData = true;
+ }
+ fprintf(fp, "\n");
+
+ for (int j = 0; j < v_.GetSize(); ++j)
+ {
+ if (hasData) // data properties are all shown on the same line
+ {
+ fprintf(fp, "%*s %4d:", l_, "", j);
+ c4_RowRef r = v_[j];
+
+ for (int k = 0; k < types.GetLength(); ++k)
+ {
+ c4_Property p = v_.NthProperty(k);
+
+ switch (types[k])
+ {
+ case 'I':
+ fprintf(fp, " %ld", (long) ((c4_IntProp&) p) (r));
+ break;
+
+#if !q4_TINY
+ case 'F':
+ fprintf(fp, " %g", (double) ((c4_FloatProp&) p) (r));
+ break;
+
+ case 'D':
+ fprintf(fp, " %.12g", (double) ((c4_DoubleProp&) p) (r));
+ break;
+#endif
+
+ case 'S':
+ fprintf(fp, " '%s'", (const char*) ((c4_StringProp&) p) (r));
+ break;
+
+ case 'M': // backward compatibility
+ case 'B':
+ fprintf(fp, " (%db)", (p (r)).GetSize());
+ break;
+
+ default:
+ if (types[k] != 'V')
+ fprintf(fp, " (%c?)", types[k]);
+ }
+ }
+
+ fprintf(fp, "\n");
+ }
+
+ if (hasSubs) // subviews are then shown, each as a separate block
+ {
+ for (int k = 0; k < types.GetLength(); ++k)
+ {
+ if (types[k] == 'V')
+ {
+ c4_Property prop = v_.NthProperty(k);
+
+ fprintf(fp, "%*s %4d: subview '%s'\n", l_, "", j,
+ (const char*) prop.Name());
+
+ c4_ViewProp& vp = (c4_ViewProp&) prop;
+
+ ViewDisplay(vp (v_[j]), fp, l_ + 2);
+ }
+ }
+ }
+ }
+}
+
+void DumpFile(const char* in_, const char* out_)
+{
+ FILE* fp = fopen(out_, TEXTOUT);
+ A(fp);
+
+ c4_Storage store (in_, 0);
+
+ ViewDisplay(store, fp);
+
+ fclose(fp);
+}
+
+void Fail(const char* msg)
+{
+ #if q4_NOTHROW
+ fprintf(stderr, "\t%s\n", msg);
+ printf("*** %s ***\n", msg);
+ #else
+ throw msg;
+ #endif
+}
+
+void FailExpr(const char* expr)
+{
+ char buffer [100];
+ sprintf(buffer, "Failed: A(%s)", expr);
+ Fail(buffer);
+}
+
+int StartTest(int mask_, const char* name_, const char* desc_)
+{
+ if (mask_)
+ {
+ #if q4_MFC && defined(_DEBUG)
+ TRACE("%s - %-40s *** DISABLED ***\n", name_, desc_);
+ #endif
+ #if !q4_MWCW_PROFILER
+ fprintf(stderr, "%s - %-40s *** DISABLED ***\n", name_, desc_);
+ #endif
+ return false;
+ }
+
+ #if q4_MFC && defined(_DEBUG)
+ TRACE("%s - %s\n", name_, desc_);
+ #endif
+ #if !q4_MWCW_PROFILER
+ fprintf(stderr, "%s - %s\n", name_, desc_);
+ #endif
+
+ char buffer [50];
+ sprintf(buffer, "%s%s.txt", TESTDIR, name_);
+ #if _WIN32_WCE
+ fclose(stdout);
+ fopen(buffer, TEXTOUT);
+ #else
+ freopen(buffer, TEXTOUT, stdout);
+ #endif
+ printf(">>> %s\n", desc_);
+
+ return true;
+}
+
+void CatchMsg(const char* msg)
+{
+ #if !q4_MWCW_PROFILER
+ fprintf(stderr, "\t%s\n", msg);
+ #endif
+ printf("*** %s ***\n", msg);
+}
+
+void CatchOther()
+{
+ #if !q4_MWCW_PROFILER
+ fputs("\tException!\n", stderr);
+ #endif
+ printf("*** Exception ***\n");
+}