https://github.com/werbhelius/statemachine
state machine by kotlin
https://github.com/werbhelius/statemachine
Last synced: 2 months ago
JSON representation
state machine by kotlin
- Host: GitHub
- URL: https://github.com/werbhelius/statemachine
- Owner: werbhelius
- License: mit
- Created: 2018-07-26T09:44:51.000Z (almost 7 years ago)
- Default Branch: master
- Last Pushed: 2018-10-15T10:05:19.000Z (over 6 years ago)
- Last Synced: 2025-03-23T23:35:57.074Z (3 months ago)
- Language: Kotlin
- Size: 131 KB
- Stars: 15
- Watchers: 1
- Forks: 3
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# statemachine
### Dependency
```gradle
implementation 'com.werb.statemachine:statemachine:0.0.1'
```### Example
### Code
```kotlin
class StateMachineTest {enum class State { Solid, Liquid, Gas }
enum class Transition { OnMelted, OnFroze, OnVaporized, OnCondensed }
private val stateMachine: StateMachine by lazy {
StateMachine().apply {state(State.Solid) {
lastState?.apply {
println("I have been ${State.Solid} from $this")
} ?: with(State.Solid) {
println("I have been initialState with $this")
}
}state(State.Liquid) {
lastState?.apply {
println("I have been ${State.Liquid} from $this")
} ?: with(State.Liquid) {
println("I have been initialState with $this")
}
}state(State.Gas) {
lastState?.apply {
println("I have been ${State.Gas} from $this")
} ?: with(State.Gas) {
println("I have been initialState with $this")
}
}addTransition(State.Solid, Transition.OnMelted, State.Liquid)
addTransition(State.Liquid, Transition.OnFroze, State.Solid)
addTransition(State.Liquid, Transition.OnVaporized, State.Gas)
addTransition(State.Gas, Transition.OnCondensed, State.Liquid)
}
}@Test
fun initialState() {
stateMachine.initialState(State.Solid)
}@Test
fun solid_onMelted_to_liquid() {
stateMachine.initialState(State.Solid)
stateMachine.executeTransition(Transition.OnMelted)
}@Test
fun liquid_onFroze_to_solid() {
stateMachine.initialState(State.Liquid)
stateMachine.executeTransition(Transition.OnFroze)
}@Test
fun liquid_onVaporized_to_gas() {
stateMachine.initialState(State.Liquid)
stateMachine.executeTransition(Transition.OnVaporized)
}@Test
fun gas_onCondensed_to_liquid() {
stateMachine.initialState(State.Gas)
stateMachine.executeTransition(Transition.OnCondensed)
}}
```