Files
TeslaRel410/CODE/RP/MUNGA/EVENT.TCP
T
CydandClaude Fable 5 fdd9ac9d97 Initial import: Tesla Release 4.10 (Tesla:BattleTech & Tesla:Red Planet)
Archival snapshot of the Virtual World Entertainment Tesla cockpit
software, 1994-1996: MUNGA engine and L4 pod layer source (Borland
C++ 5.0), BT/RP game code, and game content (models, audio, maps,
gauges, Division renderer data). Includes third-party libraries:
Division dVS/DPL graphics, HMI SOS audio, WATTCP networking.

Files are preserved byte-for-byte (.gitattributes disables all
line-ending conversion). README.md documents the layout, target
hardware, and toolchain.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-02 13:21:58 -05:00

175 lines
4.1 KiB
Plaintext

//===========================================================================//
// File: event.tst //
// Project: MUNGA Brick: Dynamic Dispatch //
// Contents: Test 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 "testclas.hpp"
Logical
EventQueue::TestClass()
{
DEBUG_STREAM << "Starting EventQueue test...\n";
//
// Construct Queues
//
EventQueue
*p = EventQueue::Make(5),
*q = new EventQueue;
Register_Object(q);
Test(p->priorityLevels == 5);
Test(q->priorityLevels == 1);
//
// Test how a single priority queue works
//
Receiver::Message
m(Alpha::message0ID, sizeof(Receiver::Message)),
n(Alpha::message1ID, sizeof(Receiver::Message));
Alpha
a,b;
Event
*event;
q->Post(0, &a, &m);
Test(a.x == -1);
event = q->PeekAtNextEvent();
Test(event);
Test(event->targetReceiver.GetCurrent() == &a);
Test(event->messageToSend);
Test(a.x == -1);
PlugIteratorOf<Event*>
i(&a);
Test(i.GetCurrent() == event);
event->Process();
Test(a.x == 0);
Test(!q->PeekAtNextEvent());
//
// Test multiple events
//
a.x = -1;
q->Post(0, &a, &m);
event = q->PeekAtNextEvent();
q->Post(0, &a, &n);
Test(q->PeekAtNextEvent() == event);
Test(q->ProcessOneEvent());
Test(a.x == 0);
Test(q->ProcessOneEvent());
Test(a.x == 1);
Test(!q->ProcessOneEvent());
//
// Test timed messages
//
a.x = -1;
Time t = Now();
t += 0.5f;
q->Post(0, &a, &m, t);
Time t2 = t;
t2 += 0.1f;
while (!q->ProcessOneEvent())
{
Test(Now() < t2);
}
Scalar f = Now() - t;
Test(Abs(f) < 0.06f);
Test(a.x == 0);
Test(!q->PeekAtNextEvent());
//
// Test multi-priority Queues
//
a.x = -1;
p->Post(2, &a, &m);
event = p->PeekAtNextEvent();
Test(event);
p->Post(3, &a, &n);
Test(event != p->PeekAtNextEvent());
p->ProcessOneEvent(3);
Test(a.x == 1);
event = p->PeekAtNextEvent(3);
Test(!event);
event = p->PeekAtNextEvent();
Test(event);
Test(event->targetReceiver.GetCurrent() == &a);
p->ProcessOneEvent();
Test(a.x == 0);
Test(!p->PeekAtNextEvent());
//
// Test Reposting
//
a.x = -1;
q->Post(0, &a, &m);
event = q->PeekAtNextEvent();
event->Repost(p,2);
Test(!q->PeekAtNextEvent());
Test(!p->PeekAtNextEvent(3));
Test(p->PeekAtNextEvent(2));
p->ProcessOneEvent();
Test(!p->PeekAtNextEvent());
Test(a.x == 0);
//
// Test event deference
//
a.x = -1;
q->Post(0, &a, &m);
event = q->PeekAtNextEvent();
event->Defer();
Test(!q->PeekAtNextEvent());
a.ProcessDeferredQueue();
Test(a.x == 0);
//
// Test destroying a receiver
//
Alpha *a2 = new Alpha;
Register_Object(a2);
p->Post(1, a2, &n);
Test(p->PeekAtNextEvent());
Unregister_Object(a2);
delete a2;
Test(!p->PeekAtNextEvent());
//
// Now test the flushing functions
//
q->Post(0, &a, &n);
q->Post(0, &a, &m);
a.FlushMatchingEvents(Alpha::message1ID);
Test(q->PeekAtNextEvent()->messageToSend->messageID == Alpha::message0ID);
a.FlushEvents();
Test(!q->PeekAtNextEvent());
q->Post(0, &a, &n);
q->Post(0, &b, &m);
q->FlushMatchingEvents(Alpha::message1ID);
Test(q->PeekAtNextEvent()->messageToSend->messageID == Alpha::message0ID);
q->FlushAllEvents();
Test(!q->PeekAtNextEvent());
//
// Get rid of the queues
//
Unregister_Object(p);
delete[] p;
Unregister_Object(q);
delete q;
return True;
}