/***************************************************************************
 * Copyright 1995, Technion, Israel Institute of Technology
 * Electrical Eng, Software Lab.
 * Author:    Michael Veksler.
 ***************************************************************************
 * File:      dde_atom_test.c
 * Purpose :  tests for dde_atom object
 ***************************************************************************
 */
#include <stdio.h>
#include <stdlib.h>
#include <win.h>
#include "dde_atom.h"
#include "shm_main_blk.h"
#include <stddebug.h>
#include <debug.h>
#define TOGETHER (DDE_ATOMS/5)


/* run random sequences */
int main()
{
  ATOM atom_list[TOGETHER];
  char str[TOGETHER][80];
  int i,j,atom_n;
  int atom_len[TOGETHER];
  
  debugging_shm=1;
  debugging_atom=0;
  debugging_sem=0;
  
  for (i=0 ; i<=10000/TOGETHER ; i++) {
     for (atom_n=0 ; atom_n<TOGETHER ; atom_n++) {
	atom_len[atom_n]=rand()%64+1;
	for (j=atom_len[atom_n]-1; j>=0; j--) 
	   do {
	      str[atom_n][j]=(char)(rand()%255+1);
	   } while (j==0 && str[atom_n][j]=='#');

	str[atom_n][ atom_len[atom_n] ]='\0';

	atom_list[atom_n]=GlobalAddAtom(str[atom_n]);

	if (atom_list[atom_n]==0) {
	   fprintf(stderr,"failed i=%d, atom_n=%d\n",i,atom_n);
	   return 1;
	}
	if (atom_list[atom_n]!=GlobalAddAtom(str[atom_n])) {
	   fprintf(stderr,
		   "wrong second GlobalAddAtom(\"%s\")\n", str[atom_n]);
	   return 1;
	}
     } /* for */
     for (atom_n=0 ; atom_n<TOGETHER ; atom_n++) {
	char buf[80];
	int len;

	len=GlobalGetAtomName( atom_list[atom_n], buf, 79);
	if (atom_len[atom_n] != len) {
	   fprintf(stderr, "i=%d, atom_n=%d; ", i, atom_n);
	   fprintf(stderr,
		   "wrong length of GlobalGetAtomName(\"%s\")\n",
		   str[atom_n]);

	   return 1;
	}
	   
     }
     for (atom_n=0 ; atom_n<TOGETHER ; atom_n++) {
	GlobalDeleteAtom(atom_list[atom_n]);
	if (atom_list[atom_n]!=GlobalAddAtom(str[atom_n])) {
	   fprintf(stderr, "i=%d, atom_n=%d; ", i, atom_n);
	   fprintf(stderr,
		   "wrong third GlobalAddAtom(\"%s\")\n", str[atom_n]);
	   return 1;
	}
	GlobalDeleteAtom(atom_list[atom_n]);
	GlobalDeleteAtom(atom_list[atom_n]);
	
	atom_list[atom_n]=GlobalAddAtom(str[atom_n]);
	if (atom_list[atom_n]!=GlobalAddAtom(str[atom_n])) {
	   fprintf(stderr,
		   "i=%d, atom_n=%d wrong fifth GlobalAddAtom(\"%s\")\n",
		   i, atom_n,
		   str[atom_n]);
	   return 1;
	}
	GlobalDeleteAtom(atom_list[atom_n]);
	if (atom_list[atom_n]!=GlobalFindAtom(str[atom_n])) {
	   fprintf(stderr,
		   "i=%d, atom_n=%d wrong GlobalFindAtom(\"%s\")\n",
		   i, atom_n,
		   str[atom_n]);
	   return 1;
	}
	GlobalDeleteAtom(atom_list[atom_n]);
     }     
  }
  return 0;
}
