Complete disaster-recovery snapshot: engine/game source, game data assets, VC6 toolchain + DX SDKs, build outputs, deployed game, and _UNUSED archive. Large binaries in Git LFS; text preserved byte-for-byte (core.autocrlf=false, no eol attributes). See RECOVERY.md for the one-clone rebuild procedure.
187 lines
4.4 KiB
C++
187 lines
4.4 KiB
C++
//===========================================================================//
|
|
// File: event.tst //
|
|
// Project: MUNGA Brick: Dynamic Dispatch //
|
|
// Contents: Verify stuff for Event class //
|
|
//---------------------------------------------------------------------------//
|
|
// Date Who Modification //
|
|
// -------- --- ---------------------------------------------------------- //
|
|
// 11/02/94 JMA Initial coding. //
|
|
//---------------------------------------------------------------------------//
|
|
// Copyright (C) 1994, Virtual World Entertainment, Inc. All Rights reserved //
|
|
// PROPRIETARY AND CONFIDENTIAL //
|
|
//===========================================================================//
|
|
|
|
#include "AdeptHeaders.hpp"
|
|
|
|
#include "receiver_test.hpp"
|
|
|
|
bool
|
|
EventQueue::TestClass()
|
|
{
|
|
SPEW((GROUP_STUFF_TEST, "Starting EventQueue test..."));
|
|
|
|
//
|
|
// Construct Queues
|
|
//
|
|
EventQueue
|
|
*p = EventQueue::Make(5),
|
|
*q = new EventQueue;
|
|
Register_Object(q);
|
|
|
|
Verify(p->priorityLevels == 5);
|
|
Verify(q->priorityLevels == 1);
|
|
|
|
//
|
|
// Verify how a single priority queue works
|
|
//
|
|
Receiver::Message
|
|
m(
|
|
Alpha::Method0MessageID,
|
|
sizeof(Receiver::Message),
|
|
0,
|
|
Receiver::Message::DefaultFlags
|
|
),
|
|
n(
|
|
Alpha::Method1MessageID,
|
|
sizeof(Receiver::Message),
|
|
0,
|
|
Receiver::Message::DefaultFlags
|
|
);
|
|
Alpha
|
|
a,b;
|
|
Event
|
|
*event;
|
|
|
|
q->Post(&a, &m);
|
|
Verify(a.x == -1);
|
|
|
|
event = q->PeekAtNextEvent();
|
|
Verify(event);
|
|
Verify(event->targetReceiver.GetCurrent() == &a);
|
|
Verify(event->messageToSend);
|
|
Verify(a.x == -1);
|
|
STOP(("Not implemented"));
|
|
#if 0
|
|
PlugIteratorOf<Event*>
|
|
i(&a);
|
|
Verify(i.GetCurrent() == event);
|
|
|
|
event->Process();
|
|
Verify(a.x == 0);
|
|
Verify(!q->PeekAtNextEvent());
|
|
#endif
|
|
|
|
//
|
|
// Verify multiple events
|
|
//
|
|
a.x = -1;
|
|
q->Post(&a, &m);
|
|
event = q->PeekAtNextEvent();
|
|
q->Post(&a, &n);
|
|
Verify(q->PeekAtNextEvent() == event);
|
|
Verify(q->ProcessOneEvent());
|
|
Verify(a.x == 0);
|
|
Verify(q->ProcessOneEvent());
|
|
Verify(a.x == 1);
|
|
Verify(!q->ProcessOneEvent());
|
|
|
|
#if 0
|
|
//
|
|
// Verify timed messages
|
|
//
|
|
a.x = -1;
|
|
Time t = Now();
|
|
t += 0.5f;
|
|
q->Post(&a, &m, t);
|
|
SystemTime t2 = t;
|
|
t2 += 0.1f;
|
|
while (!q->ProcessOneEvent())
|
|
{
|
|
Verify(Now() < t2);
|
|
}
|
|
Scalar f = (Now() - t).GetSeconds();
|
|
Verify(Abs(f) < 0.06f);
|
|
Verify(a.x == 0);
|
|
Verify(!q->PeekAtNextEvent());
|
|
#endif
|
|
|
|
//
|
|
// Verify multi-priority Queues
|
|
//
|
|
a.x = -1;
|
|
m.messagePriority = 2;
|
|
p->Post(&a, &m);
|
|
event = p->PeekAtNextEvent();
|
|
Verify(event);
|
|
n.messagePriority = 3;
|
|
p->Post(&a, &n);
|
|
Verify(event != p->PeekAtNextEvent());
|
|
|
|
p->ProcessOneEvent(3);
|
|
Verify(a.x == 1);
|
|
event = p->PeekAtNextEvent(3);
|
|
Verify(!event);
|
|
event = p->PeekAtNextEvent();
|
|
Verify(event);
|
|
Verify(event->targetReceiver.GetCurrent() == &a);
|
|
p->ProcessOneEvent();
|
|
Verify(a.x == 0);
|
|
Verify(!p->PeekAtNextEvent());
|
|
|
|
//
|
|
// Verify Reposting
|
|
//
|
|
a.x = -1;
|
|
m.messagePriority = 0;
|
|
q->Post(&a, &m);
|
|
event = q->PeekAtNextEvent();
|
|
event->messageToSend->messagePriority = 2;
|
|
event->Repost(p);
|
|
Verify(!q->PeekAtNextEvent());
|
|
Verify(!p->PeekAtNextEvent(3));
|
|
Verify(p->PeekAtNextEvent(2));
|
|
p->ProcessOneEvent();
|
|
Verify(!p->PeekAtNextEvent());
|
|
Verify(a.x == 0);
|
|
|
|
//
|
|
// Verify destroying a receiver
|
|
//
|
|
Alpha *a2 = new Alpha;
|
|
Register_Object(a2);
|
|
n.messagePriority = 1;
|
|
p->Post(a2, &n);
|
|
Verify(p->PeekAtNextEvent());
|
|
Unregister_Object(a2);
|
|
delete a2;
|
|
Verify(!p->PeekAtNextEvent());
|
|
|
|
//
|
|
// Time test the flushing functions
|
|
//
|
|
n.messagePriority = 0;
|
|
q->Post(&a, &n);
|
|
q->Post(&a, &m);
|
|
a.FlushMatchingEvents(Alpha::Method1MessageID);
|
|
Verify(q->PeekAtNextEvent()->messageToSend->messageID == Alpha::Method0MessageID);
|
|
a.FlushEvents();
|
|
Verify(!q->PeekAtNextEvent());
|
|
|
|
q->Post(&a, &n);
|
|
q->Post(&b, &m);
|
|
q->FlushMatchingEvents(Alpha::Method1MessageID);
|
|
Verify(q->PeekAtNextEvent()->messageToSend->messageID == Alpha::Method0MessageID);
|
|
q->FlushAllEvents();
|
|
Verify(!q->PeekAtNextEvent());
|
|
|
|
//
|
|
// Get rid of the queues
|
|
//
|
|
Unregister_Object(p);
|
|
delete[] p;
|
|
|
|
Unregister_Object(q);
|
|
delete q;
|
|
return true;
|
|
}
|