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  }