public IEnumerator MainPowerSafeTest() // test handling edge cases
    {
        GameObject goFail = new GameObject();

        goFail.AddComponent <MainPowerStatus>();
        MainPowerStatus FailMPS = goFail.GetComponent <MainPowerStatus>(); // for failing to make change

        yield return(new WaitForFixedUpdate());

        //Fail call Test
        Assert.AreEqual(50, FailMPS.AvailablePower);  // initial
        FailMPS.RetrievePower(SourceTag.MainControl); // Retrieving from empty Source. shouldn't work
        Assert.AreNotEqual(60, FailMPS.AvailablePower);
        Assert.AreEqual(50, FailMPS.AvailablePower);
        FailMPS.TransferPower(SourceTag.MainControl, 60);                    // Transferring more than available.
        Assert.AreEqual(50, FailMPS.AvailablePower);                         // should be same
        Assert.AreNotEqual(60, FailMPS.powerDistribution[0].AvailablePower); //shouldn't have transfered
        FailMPS.TransferPower(SourceTag.DiningHall, 50);                     // Transferring more than needed.
        Assert.AreEqual(50, FailMPS.AvailablePower);                         // should be same
        Assert.AreNotEqual(50, FailMPS.powerDistribution[2]);
        Assert.AreEqual(0, FailMPS.powerDistribution[0].AvailablePower);
        FailMPS.RetrievePower(SourceTag.MainControl); // retrieving from empty source
        Assert.AreEqual(50, FailMPS.AvailablePower);
        Assert.AreEqual(0, FailMPS.powerDistribution[0].AvailablePower);
    }
    public IEnumerator MainPowerIncreaseTest() // test increasing reserve
    {
        GameObject goIncrease = new GameObject();

        goIncrease.AddComponent <MainPowerStatus>();

        MainPowerStatus IncreaseMPS = goIncrease.GetComponent <MainPowerStatus>(); // for increasing reserve

        yield return(new WaitForFixedUpdate());

        //ReservePower Test
        Assert.AreEqual(50, IncreaseMPS.AvailablePower); // before increase
        IncreaseMPS.ReservePower();                      // increase reserve by 10
        Assert.AreEqual(60, IncreaseMPS.AvailablePower); // check result
        IncreaseMPS.ReservePower(30);                    // increase power by 30
        Assert.AreEqual(90, IncreaseMPS.AvailablePower);
    }
    public IEnumerator MainPowerAwakeTest()     // test awake method
    {
        GameObject go = new GameObject();

        go.AddComponent <MainPowerStatus>();
        MainPowerStatus MPS = go.GetComponent <MainPowerStatus>();

        yield return(new WaitForFixedUpdate());

        Assert.AreEqual(50, MPS.AvailablePower);
        Assert.AreEqual(SourceTag.MainControl, MPS.powerDistribution[0].SourceTag);
        Assert.AreEqual(SourceTag.DockingBay, MPS.powerDistribution[1].SourceTag);
        Assert.AreEqual(SourceTag.DiningHall, MPS.powerDistribution[2].SourceTag);
        Assert.AreEqual(SourceTag.PrivateQuarter, MPS.powerDistribution[3].SourceTag);
        Assert.AreEqual(SourceTag.EngineRoom, MPS.powerDistribution[4].SourceTag);
        Assert.AreEqual(100, MPS.powerDistribution[0].maxPower);
        Assert.AreEqual(0, MPS.powerDistribution[0].AvailablePower);
        Assert.AreEqual(50, MPS.powerDistribution[1].maxPower);
        Assert.AreEqual(30, MPS.powerDistribution[2].maxPower);
    }
    public IEnumerator MainPowerEmptyTest() // test lif support edge cases
    {
        GameObject goEmpty = new GameObject();

        goEmpty.AddComponent <MainPowerStatus>();
        MainPowerStatus EmptyMPS = goEmpty.GetComponent <MainPowerStatus>(); // for making it empty

        yield return(new WaitForFixedUpdate());

        //lifeSupport test
        Assert.AreEqual(50, EmptyMPS.AvailablePower);
        EmptyMPS.RetrieveLifeSupport();                    // get rid of one life support
        Assert.AreEqual(60, EmptyMPS.AvailablePower);      // more power should be available
        EmptyMPS.RetrieveLifeSupport(20);                  // getting rid of all life support
        Assert.AreEqual(80, EmptyMPS.AvailablePower);      // Available should be Reserve now
        EmptyMPS.TransferPower(SourceTag.MainControl, 80); // Transferring all power to MainControl
        Assert.AreEqual(0, EmptyMPS.AvailablePower);
        Assert.AreEqual(80, EmptyMPS.powerDistribution[0].AvailablePower);
        EmptyMPS.RetrievePower(SourceTag.MainControl, 80); //Retrieve all power
        Assert.AreEqual(80, EmptyMPS.AvailablePower);
        Assert.AreEqual(0, EmptyMPS.powerDistribution[0].AvailablePower);
    }