go.charczuk.com@v0.0.0-20240327042549-bc490516bd1a/sdk/async/latch_thin_test.go (about) 1 /* 2 3 Copyright (c) 2023 - Present. Will Charczuk. All rights reserved. 4 Use of this source code is governed by a MIT license that can be found in the LICENSE file at the root of the repository. 5 6 */ 7 8 package async 9 10 import ( 11 "testing" 12 13 . "go.charczuk.com/sdk/assert" 14 ) 15 16 func Test_LatchThin(t *testing.T) { 17 lt := new(LatchThin) 18 19 /* assert we can't skip chain states */ 20 ItsEqual(t, false, lt.Started()) 21 ItsEqual(t, false, lt.Stopping()) 22 ItsEqual(t, false, lt.Stopped()) 23 24 /* assert the initial state is valid */ 25 ItsEqual(t, true, lt.IsStopped()) 26 ItsEqual(t, false, lt.IsStarting()) 27 ItsEqual(t, false, lt.IsStarted()) 28 ItsEqual(t, false, lt.IsStopping()) 29 30 /* advance to starting */ 31 ItsEqual(t, true, lt.Starting()) 32 33 ItsEqual(t, false, lt.IsStopped()) 34 ItsEqual(t, true, lt.IsStarting()) 35 ItsEqual(t, false, lt.IsStarted()) 36 ItsEqual(t, false, lt.IsStopping()) 37 38 ItsEqual(t, false, lt.Starting()) 39 ItsEqual(t, false, lt.Stopping()) 40 ItsEqual(t, false, lt.Stopped()) 41 42 /* advance to started */ 43 ItsEqual(t, true, lt.Started()) 44 45 ItsEqual(t, false, lt.IsStopped()) 46 ItsEqual(t, false, lt.IsStarting()) 47 ItsEqual(t, true, lt.IsStarted()) 48 ItsEqual(t, false, lt.IsStopping()) 49 50 ItsEqual(t, false, lt.Starting()) 51 ItsEqual(t, false, lt.Started()) 52 ItsEqual(t, false, lt.Stopped()) 53 54 /* advance to stopping */ 55 ItsEqual(t, true, lt.Stopping()) 56 57 ItsEqual(t, false, lt.IsStopped()) 58 ItsEqual(t, false, lt.IsStarting()) 59 ItsEqual(t, false, lt.IsStarted()) 60 ItsEqual(t, true, lt.IsStopping()) 61 62 ItsEqual(t, false, lt.Starting()) 63 ItsEqual(t, false, lt.Started()) 64 ItsEqual(t, false, lt.Stopping()) 65 66 /* advance to stopped */ 67 ItsEqual(t, true, lt.Stopped()) 68 69 ItsEqual(t, true, lt.IsStopped()) 70 ItsEqual(t, false, lt.IsStarting()) 71 ItsEqual(t, false, lt.IsStarted()) 72 ItsEqual(t, false, lt.IsStopping()) 73 74 ItsEqual(t, false, lt.Started()) 75 ItsEqual(t, false, lt.Stopping()) 76 ItsEqual(t, false, lt.Stopped()) 77 78 /* advance to started so we can reset */ 79 ItsEqual(t, true, lt.Starting()) 80 ItsEqual(t, true, lt.Started()) 81 82 lt.Reset() 83 84 ItsEqual(t, true, lt.IsStopped()) 85 ItsEqual(t, false, lt.IsStarting()) 86 ItsEqual(t, false, lt.IsStarted()) 87 ItsEqual(t, false, lt.IsStopping()) 88 } 89 90 func Test_LatchThin_embedded(t *testing.T) { 91 /* 92 this test asserts that we can embed the _NON POINTER_ receiver 93 version of latch thin and it'll still mutate correctly 94 */ 95 96 type embeddedTest struct { 97 l LatchThin 98 } 99 100 e := new(embeddedTest) 101 102 e.l.Starting() 103 e.l.Started() 104 ItsEqual(t, true, e.l.IsStarted()) 105 }