improve ping-pong test

This commit is contained in:
Brian Sakal
2023-05-14 15:44:46 -04:00
parent ad41407ac6
commit a6f6c3cd17
2 changed files with 14 additions and 27 deletions
+6 -24
View File
@@ -1,21 +1,10 @@
import { Machine, State, On, SideEffect, Goto, Spawn, Unspawn, interpret, Interpreter_T, send, Event_T } from '../index';
import { Machine, State, On, SideEffect, Goto, Spawn, Unspawn, interpret, Interpreter_T, send, Event_T, Context } from '../index';
const wait = (ms:number)=>new Promise((resolve)=>{ setTimeout(()=>{ resolve(1); }, ms); });
const makeRequest = (ctx,e,self)=>{ send(ctx.serverActor, ['received-request',self]); };
const sendResponse = (ctx,e,self)=>{ send(ctx.clientActor, ['received-response',self]); };
const startTimer = async (ctx,e,self)=>{ await wait(500); send(self, ['timer-finished',null]); }
const log = (ctx, e, self:Interpreter_T)=>{ console.log(self.state); };
type Sc =
| 'idle'
| 'making-request'
| 'awaiting-response';
type Ec =
| ['entry',null]
| ['received-response',Interpreter_T]
| ['server-created', Interpreter_T];
type Cc =
| {serverActor?:Interpreter_T};
const startTimer = async (ctx,e,self)=>{ await wait(1500); send(self, ['timer-finished',null]); }
const log = (ctx, e, self:Interpreter_T)=>{ console.log(self.state, ctx); };
const client =
Machine(
@@ -32,6 +21,7 @@ const client =
On('entry',
SideEffect(log),
SideEffect(makeRequest),
Context((ctx)=>({...ctx, requestsMade: ctx.requestsMade+1})),
Goto('awaiting-response')
),
),
@@ -41,20 +31,12 @@ const client =
),
On('received-response',
SideEffect(log),
Context((ctx)=>({...ctx, responsesReceived: ctx.responsesReceived+1})),
Goto('making-request')
),
),
);
type Ss =
| 'awaiting-request'
| 'sending-response';
type Es =
| ['entry',null]
| ['received-request',Interpreter_T]
| ['timer-finished', null];
type Cs = {clientActor?:Interpreter_T};
const server =
Machine(
State('awaiting-request',
@@ -78,6 +60,6 @@ const server =
),
);
const clientActor = interpret(client, {context:{}});
const clientActor = interpret(client, {context:{requestsMade:0, responsesReceived:0}});
const serverActor = interpret(server, {context:{}});
send(clientActor, ['server-created', serverActor]);