+++ /dev/null
-/*
- openisis - an open implementation of the CDS/ISIS database
- Version 0.8.x (patchlevel see file Version)
- Copyright (C) 2001-2003 by Erik Grziwotz, erik@openisis.org
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
- see README for more information
-EOH */
-
-/*
- $Id: lrectest.c,v 1.12 2003/05/01 10:05:41 mawag Exp $
- tests for lrec methods.
-*/
-
-#include <errno.h>
-#include <stdarg.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "openisis.h"
-#include "loi.h"
-#include "lfdt.h"
-#include "luti.h"
-
-#ifdef WIN32
-#define snprintf _snprintf
-#define vsnprintf _vsnprintf
-#endif
-
-static const char* _TheSummary = "Meeting on the Implementation of the Recommendations of the Third Regional Conference of Ministers of Education and Ministers Responsible for Economic Planning in the Arab States";
-#define SUMLEN (strlen (_TheSummary))
-
-static Fd _TheFds[] = {
- { 20, 0, FTX, 0, 0, 32, "author", "", 0, 0, 0, 0 },
- { 21, 0, FTX, 1, 0, 32, "names", "", 0, 0, 0, 0 },
- { 22, 0, FTX, 1, 0, 32, "year", "", 0, 0, 0, 0 },
- { 42, 0, FTX, 1, 0, 32, "title", "", 0, 0, 0, 0 },
- { 49, 0, FTX, 1, 0, 32, "summary", "", 0, 0, 0, 0 },
- { 70, 0, FTX, 1, 0, 32, "country", "", 0, 0, 0, 0 },
- { 80, 0, FTX, 1, 0, 32, "conference", "", 0, 0, 0, 0 },
- { 81, 0, FTE, 0, 0, 32, "format", "", 0, 0, 0, 0 },
- { 81, 0, FTV, 0, 0, 1, "autoformat", "", 0, 0, 0, 0 },
- { 81, 0, FTV, 0, 0, 2, "naligned", "", 0, 0, 0, 0 },
- { 81, 0, FTV, 0, 0, 73, "aligned", "", 0, 0, 0, 0 },
- { 82, 0, FTB, 0, 0, 10, "soldout", "", 0, 0, 0, 0 }
-};
-
-static Fdt _TheFdt = {
- sizeof(_TheFds) / sizeof(_TheFds[0]),
- _TheFds,
- 0
-};
-
-static void check (
- char *msg, Rec *rec, int *tag, const char **val, int len, int used
-) {
- Field *F;
- int idx, vlen, ok;
- if (0 == rec) {
- fprintf (stderr, "ERR %s: 0 == rec\n", msg);
- exit (1);
- }
- if (! OPENISIS_RECOK (rec)) {
- fprintf (stderr, "ERR %s: ! RECOK: b %d u %d/%d f %d/%d\n",
- msg, rec->base, rec->used, rec->bytes, rec->len, rec->fields);
- exit (1);
- }
- if (len != rec->len) {
- fprintf (stderr, "ERR %s: len %d != %d\n", msg, rec->len, len);
- log_rec (LOG_ERROR, rec, 0, 0);
- exit (1);
- }
- if (0 <= used && used != rec->used - rec->base) {
- fprintf (stderr, "ERR %s: used %d (%d-%d) != %d\n",
- msg, (rec->used - rec->base), rec->used, rec->base, used);
- log_rec (LOG_ERROR, rec, 0, 0);
- exit (1);
- }
- ok = !0;
- for (idx = 0; len > idx; ++idx) {
- vlen = strlen (val[idx]);
- F = rec->field + idx;
- if (F->tag != tag[idx]) {
- fprintf (stderr, "ERR %s: fld[%d] tag %d != %d\n",
- msg, idx, F->tag, tag[idx]);
- ok = 0;
- }
- if (F->len != vlen ||
- strncmp (F->val, val[idx], vlen)) {
- fprintf (stderr, "ERR %s: fld[%d] val <%.*s> != <%s>\n",
- msg, idx, (int)F->len, F->val, val[idx]);
- ok = 0;
- }
- }
- if (! ok) {
- exit (1);
- }
-}
-
-int main (int argc, char **argv) {
- const char *args[32];
- const char *vals[32];
- int tags[32];
- Rec *rec = 0;
-
- /* call lio_init to prepare stderr on windows */
- openIsisCOpen (0);
-
- if (1 < argc) {
-#define EXPFLD (1332 + (1000 - 888))
- int bytes = 0, used = 0, num = atoi (argv[1]);
- printf ("entering loops (%d) ...\n", num);
- while (num) {
- int j;
- rec = 0;
- for (j = 1000; 1 <= --j; ) {
- RADD (rec, j, _TheSummary, SUMLEN, !0);
- }
- for (j = 888; 666 <= --j; ) {
- rec = rSet (rec, RDEL | RNOC, j, 0);
- }
- for (j = 666; 444 <= --j; ) {
- rec = rSet (rec, RDEL, j, 0);
- }
- for (j = 444; 222 <= --j; ) {
- rec = rSet (rec, RDEL | RNOC, j, 0);
- }
- for (j = 1333; 222 <= --j; ) {
- RADD (rec, j, _TheSummary, SUMLEN, !0);
- }
- if (EXPFLD != rec->len) {
- printf ("%d: ERR: #len = %d, expected %d\n",
- num, rec->len, EXPFLD);
- exit (1);
- }
- if (0 == bytes) {
- bytes = rec->bytes;
- used = rec->used;
- printf ("mem %d use %d ...\n",
- rec->bytes, rec->used);
- }
- else {
- if (bytes != rec->bytes || used != rec->used) {
- printf ("%d: ERR: mem = %d use = %d\n",
- num, rec->bytes, rec->used);
- exit (1);
- }
- if (0 == (num % 100)) {
- printf ("%d ...\n", num);
- }
- }
- mFree (rec);
- --num;
- }
- printf ("ok.\n");
- exit (0);
- }
-
- args[0] = "20";
- args[1] = "Mary";
- rec = rSet (rec, RARGV | 2, args);
- tags[0] = 20;
- vals[0] = args[1];
- check ("A", rec, tags, vals, 1, 4);
-
- args[0] = "22";
- args[1] = "1953";
- args[2] = "70";
- args[3] = "Italy";
- args[4] = "98";
- args[5] = "illegal";
- args[6] = "20";
- args[7] = "John";
- rec = rSet (rec, RARGV | RFDT | 8, &_TheFdt, args);
- tags[0] = 20;
- vals[0] = "Mary";
- tags[1] = 22;
- vals[1] = "1953";
- tags[2] = 70;
- vals[2] = "Italy";
- tags[3] = 20;
- vals[3] = "John";
- check ("B", rec, tags, vals, 3, 13);
-
- args[0] = "98";
- args[1] = "illegal";
- args[2] = "20";
- args[3] = "John";
- rec = rSet (rec, RARGV | RFDT | RIGN | 4, &_TheFdt, args);
- check ("C", rec, tags, vals, 4, 17);
-
- rec = rSet (rec, RDEL, 20, 0);
- tags[0] = 22;
- vals[0] = "1953";
- tags[1] = 70;
- vals[1] = "Italy";
- check ("D", rec, tags, vals, 2, 9);
-
- rec = rSet (rec, RDFLT | RFDT, &_TheFdt,
- 81, "naligned", 22, "already there", 0);
- tags[2] = 81;
- vals[2] = "2";
- check ("D1", rec, tags, vals, 3, 10);
-
- tags[3] = 234;
- vals[3] = "foo";
- rec = rSet (rec, RDFLT, 234, "foo", 0);
- check ("D2", rec, tags, vals, 4, 13);
-
- rec = rSet (rec, RDEL, 234, 81, 0);
- check ("D3", rec, tags, vals, 2, 13);
-
- rec = rSet (rec, 0, 20, "Mary", 20, "James", 90, "Alabama", 0);
- tags[2] = 20;
- vals[2] = "Mary";
- tags[3] = 20;
- vals[3] = "James";
- tags[4] = 90;
- vals[4] = "Alabama";
- check ("E", rec, tags, vals, 5, 29);
-
- rec = rSet (rec, RFDT | RCHG, &_TheFdt,
- 20, "Lary", 70, "Greece", 70, "Cuba", 42, "Folklore from Africa",
- 81, "invalid", 0);
- tags[0] = 22;
- vals[0] = "1953";
- tags[1] = 70;
- vals[1] = "Greece";
- tags[2] = 20;
- vals[2] = "Lary";
- tags[3] = 90;
- vals[3] = "Alabama";
- tags[4] = 70;
- vals[4] = "Cuba";
- tags[5] = 42;
- vals[5] = "Folklore from Africa";
- check ("F", rec, tags, vals, 6, 45);
-
- rec = rSet (rec, 0, 20, "Peter", 20, "Gary", 70, "Egypt", 0);
- tags[6] = 20;
- vals[6] = "Peter";
- tags[7] = 20;
- vals[7] = "Gary";
- tags[8] = 70;
- vals[8] = "Egypt";
- check ("G", rec, tags, vals, 9, 59);
-
- args[0] = "author[1]";
- args[1] = "81";
- args[2] = "70";
- rec = rSet (rec, RFDT | RARGV | RDEL | 3, &_TheFdt, args);
- tags[0] = 22;
- vals[0] = "1953";
- tags[1] = 20;
- vals[1] = "Lary";
- tags[2] = 90;
- vals[2] = "Alabama";
- tags[3] = 42;
- vals[3] = "Folklore from Africa";
- tags[4] = 20;
- vals[4] = "Gary";
- check ("H", rec, tags, vals, 5, 39);
-
- args[0] = "author[0]";
- args[1] = "May";
- args[2] = "summary";
- args[3] = _TheSummary;
- args[4] = "soldout";
- args[5] = "format";
- args[6] = "aligned";
- rec = rSet (rec, RFDT | RARGV | RCHG | RNOC | 7, &_TheFdt, args);
- vals[1] = "May";
- tags[5] = 49;
- vals[5] = _TheSummary;
- tags[6] = 82;
- vals[6] = "1";
- tags[7] = 81;
- vals[7] = "73";
- check ("I", rec, tags, vals, 8, 42 + SUMLEN);
-
- args[0] = "20[0]";
- args[1] = "Marilyn";
- args[2] = "49[1]";
- args[3] = _TheSummary;
- rec = rSet (rec, RARGV | RCHG | 4, args);
- vals[1] = "Marilyn";
- tags[8] = 49;
- vals[8] = _TheSummary;
- check ("J", rec, tags, vals, 9, 45 + 2 * SUMLEN);
-
- rec = rSet (rec, RDEL | 2, 82, 22, 0);
- tags[0] = 20;
- vals[0] = "Marilyn";
- tags[1] = 90;
- vals[1] = "Alabama";
- tags[2] = 42;
- vals[2] = "Folklore from Africa";
- tags[3] = 20;
- vals[3] = "Gary";
- tags[4] = 49;
- vals[4] = _TheSummary;
- tags[5] = 81;
- vals[5] = "73";
- tags[6] = 49;
- vals[6] = _TheSummary;
- check ("K", rec, tags, vals, 7, 40 + 2 * SUMLEN);
-
- rec = rSet (rec, RFDT | RCHG, &_TheFdt,
- 82, "false", 81, "2", 49, "overview", 0);
- vals[4] = "overview";
- vals[5] = "2";
- tags[6] = 82;
- vals[6] = "0";
- check ("L", rec, tags, vals, 7, 48);
-
- mFree (rec);
-
- printf ("ok.\n");
- return 0;
-}
-