public void ExceptionalObstructionOnPitchedOrCurvedRoofTest_CalculateDriftLength_Success()
        {
            var building = BuildingImplementation.CreateBuilding();

            var exceptionalObstructionOnPitchedOrCurvedRoof =
                new ExceptionalObstructionOnPitchedOrCurvedRoof(building, 15, 20, 1, 0.5);

            exceptionalObstructionOnPitchedOrCurvedRoof.CalculateDriftLength();
            Assert.AreEqual(5, Math.Round(exceptionalObstructionOnPitchedOrCurvedRoof.LeftDriftLength, 3),
                            "Drift length for roof is not calculated properly.");
            Assert.AreEqual(2.5, Math.Round(exceptionalObstructionOnPitchedOrCurvedRoof.RightDriftLength, 3),
                            "Drift length for roof is not calculated properly.");
        }
        public IResult Calculate()
        {
            BuildingSite buildingSite = GetBuildingSite();
            SnowLoad     snowLoad     = GetSnowLoad(buildingSite);
            Building     building     = GetBuilding(snowLoad);
            ExceptionalObstructionOnPitchedOrCurvedRoof exceptionalObstructionOnPitchedOrCurvedRoof
                = GetExceptionalObstructionOnPitchedOrCurvedRoof(building);

            if (!ExposureCoefficient.HasValue)
            {
                buildingSite.CalculateExposureCoefficient();
            }
            snowLoad.CalculateSnowLoad();
            building.CalculateThermalCoefficient();
            exceptionalObstructionOnPitchedOrCurvedRoof.CalculateDriftLength();
            exceptionalObstructionOnPitchedOrCurvedRoof.CalculateSnowLoad();

            var result = new Result();

            result.Properties.Add("C_e_", buildingSite.ExposureCoefficient);
            result.Properties.Add("s_k_", snowLoad.DefaultCharacteristicSnowLoad);
            result.Properties.Add("V", snowLoad.VariationCoefficient);
            result.Properties.Add("C_esl_", snowLoad.ExceptionalSnowLoadCoefficient);
            result.Properties.Add("s_n_", snowLoad.SnowLoadForSpecificReturnPeriod);
            result.Properties.Add("s_Ad_", snowLoad.DesignExceptionalSnowLoadForSpecificReturnPeriod);
            result.Properties.Add("t_i_", building.InternalTemperature);
            result.Properties.Add("∆_t_", building.TempreatureDifference);
            result.Properties.Add("U", building.OverallHeatTransferCoefficient);
            result.Properties.Add("C_t_", building.ThermalCoefficient);
            result.Properties.Add("l_s1_", exceptionalObstructionOnPitchedOrCurvedRoof.LeftDriftLength);
            result.Properties.Add("l_s2_", exceptionalObstructionOnPitchedOrCurvedRoof.RightDriftLength);
            result.Properties.Add("μ_1_", exceptionalObstructionOnPitchedOrCurvedRoof.LeftShapeCoefficient);
            result.Properties.Add("μ_2_", exceptionalObstructionOnPitchedOrCurvedRoof.RightShapeCoefficient);
            result.Properties.Add("s_1_", exceptionalObstructionOnPitchedOrCurvedRoof.LeftSnowLoad);
            result.Properties.Add("s_2_", exceptionalObstructionOnPitchedOrCurvedRoof.RightSnowLoad);

            return(result);
        }