diff --git a/README.md b/README.md index b49bce4..9ba8543 100644 --- a/README.md +++ b/README.md @@ -50,6 +50,8 @@ When in doubt simplify. * [Muxified Turing Machine](https://github.com/Phuire-Research/Stratimux/blob/main/The-Muxified-Turing-Machine.md) - The governing concept for this entire framework.:| ## Change Log ![Tests](https://github.com/Phuire-Research/Stratimux/actions/workflows/node.js.yml/badge +### Verbose Bad Actions 0.2.46 +* The Muxium Bad Action Quality is now being utilized and setting the muxium's bad action property as intended. ### Restored Dialog Functionality 0.2.44 * Moved the handling of the decision action node notes to the consumer function itself. ### QoL 0.2.42 diff --git a/package.json b/package.json index 0dbfad9..2a5202f 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "stratimux", "license": "GPL-3.0", - "version": "0.2.44", + "version": "0.2.46", "description": "Muxified Turing Machine", "main": "dist/index.js", "module": "dist/index.mjs", diff --git a/src/concepts/muxium/muxium.mode.ts b/src/concepts/muxium/muxium.mode.ts index c64475a..04b8b42 100644 --- a/src/concepts/muxium/muxium.mode.ts +++ b/src/concepts/muxium/muxium.mode.ts @@ -5,26 +5,21 @@ $>*/ import { Subject } from 'rxjs'; import { ActionDeck, Concepts, Mode } from '../../model/concept/concept.type'; import { primeAction } from '../../model/action/action'; -import { MuxiumState } from './muxium.concept'; +import { MuxiumDeck, MuxiumState } from './muxium.concept'; import { MuxifiedSubject } from '../../model/stagePlanner/stagePlanner'; import { getMuxiumState } from '../../model/muxium/muxiumHelpers'; import { MuxiumBadActionPayload } from './qualities'; import { updateAtomicSelects } from '../../model/selector/selectorAdvanced'; -import { Deck } from '../../model/deck'; +import { accessDeck, Deck } from '../../model/deck'; import { Action, AnyAction } from '../../model/action/action.type'; export const isActionable = (muxiumState: MuxiumState, action: Action): boolean => { let actionable = true; // We are logically determining these semaphore values by hand for now. if ( - // Logical Determination: muxiumBadActionType - action.semaphore[3] === 1 || // Logical Determination: muxiumConcludeType action.semaphore[3] === 3) { actionable = false; - if (muxiumState.logging && action.semaphore[3] === 1) { - console.warn('Bad Action', action); - } } return actionable; }; @@ -73,6 +68,13 @@ export const permissiveMode: Mode = ( } else { blockingMode([action, concepts, action$, concepts$]); } + } else if (action.semaphore[3] !== 3) { + const badAction = accessDeck(concepts).muxium.e.muxiumBadAction({ + badActions: [ + action + ] + }); + action$.next(badAction as unknown as Action); } }; @@ -122,6 +124,13 @@ export const blockingMode: Mode = ( ]); } } + } else if (action.semaphore[3] !== 3) { + const badAction = accessDeck(concepts).muxium.e.muxiumBadAction({ + badActions: [ + action + ] + }); + action$.next(badAction as unknown as Action); } }; /*#>*/ \ No newline at end of file diff --git a/src/concepts/muxium/qualities/badAction.quality.ts b/src/concepts/muxium/qualities/badAction.quality.ts index c03b27e..19262ae 100644 --- a/src/concepts/muxium/qualities/badAction.quality.ts +++ b/src/concepts/muxium/qualities/badAction.quality.ts @@ -15,7 +15,7 @@ export const muxiumBadAction = createQualityCardWithPayload { const payload = action.payload.badActions; if (state.logging) { - console.log('Muxium Received a Bad Action: ', action); + console.log('Muxium Received a Bad Action: ', action, payload); } return { badActions: [ diff --git a/src/test/badActions.test.ts b/src/test/badActions.test.ts new file mode 100644 index 0000000..b2b836b --- /dev/null +++ b/src/test/badActions.test.ts @@ -0,0 +1,30 @@ +/*<$ +For the asynchronous graph programming framework Stratimux, generate a test to demonstrate the effectiveness of semaphores and bad actions. +$>*/ +/*<#*/ +import { createCounterConcept } from '../concepts/counter/counter.concept'; +import { createAction } from '../model/action/action'; +import { muxification } from '../model/muxium/muxium'; + +test('Test bad actions functionality', (done) => { + const muxium = muxification('Mock Muxium', {counter: createCounterConcept()}, { + logging: true + }); + muxium.plan('Check Concepts', ({stage, stageO, d__}) => [ + stageO(() => d__.muxium.e.muxiumKick()), + stage(({dispatch}) => { + dispatch(createAction('Will be a bad action'), { + iterateStage: true + }); + }), + stage(({concepts, k, stagePlanner}) => { + expect(k.badActions.select().length).toBe(1); + stagePlanner.conclude(); + setTimeout(() => { + done(); + }, 500); + }) + ]); +}); + +/*#>*/ \ No newline at end of file