public void GetAvgSpeedMetersPerSecond_MaxSpeed_Is_Converted([Values("mi", "ft", "km")] string unit)
        {
            var speed         = 15.2;
            var workoutSample = new WorkoutSamples();

            workoutSample.Metrics = new List <Metric>()
            {
                new Metric()
                {
                    Slug = "speed", Display_Unit = unit, Average_Value = speed
                }
            };
            workoutSample.Summaries = new List <Summary>()
            {
                new Summary()
                {
                    Slug = "distance", Display_Unit = unit
                }
            };

            var autoMocker       = new AutoMocker();
            var converter        = autoMocker.CreateInstance <ConverterInstance>();
            var expectedDistance = converter.ConvertToMetersPerSecond1(speed, workoutSample);

            var converted = converter.GetAvgSpeedMetersPerSecond1(workoutSample);

            converted.Should().Be(expectedDistance);
        }
Beispiel #2
0
        protected Metric GetMetric(string slug, WorkoutSamples workoutSamples)
        {
            if (workoutSamples?.Metrics is null)
            {
                Log.Debug("No workout Metrics found.");
                return(null);
            }

            var metric = workoutSamples.Metrics.FirstOrDefault(s => s.Slug == slug);

            if (metric is null)
            {
                var alts = workoutSamples.Metrics
                           .Where(w => w.Alternatives is object)
                           .SelectMany(s => s.Alternatives);
                metric = alts.FirstOrDefault(s => s.Slug == slug);
            }

            if (metric is null)
            {
                Log.Debug($"No {slug} found.");
            }

            return(metric);
        }
        public ICollection <LapMesg> GetLapsBasedOnSegments(WorkoutSamples workoutSamples, Dynastream.Fit.DateTime startTime, Sport sport, SubSport subSport)
        {
            using var tracing = Tracing.Trace($"{nameof(FitConverter)}.{nameof(GetLapsBasedOnSegments)}")
                                .WithTag(TagKey.Format, FileFormat.Fit.ToString());

            var stepsAndLaps = new List <LapMesg>();

            if (workoutSamples is null)
            {
                return(stepsAndLaps);
            }

            ushort stepIndex    = 0;
            var    speedMetrics = GetSpeedSummary(workoutSamples);

            if (workoutSamples.Segment_List.Any())
            {
                var totalElapsedTime = 0;
                foreach (var segment in workoutSamples.Segment_List)
                {
                    var lapStartTime = new Dynastream.Fit.DateTime(startTime);
                    lapStartTime.Add(segment.Start_Time_Offset);

                    totalElapsedTime += segment.Length;

                    var lapMesg = new LapMesg();
                    lapMesg.SetStartTime(lapStartTime);
                    lapMesg.SetMessageIndex(stepIndex);
                    lapMesg.SetEvent(Event.Lap);
                    lapMesg.SetLapTrigger(LapTrigger.Time);
                    lapMesg.SetSport(sport);
                    lapMesg.SetSubSport(subSport);

                    lapMesg.SetTotalElapsedTime(segment.Length);
                    lapMesg.SetTotalTimerTime(segment.Length);

                    var startIndex          = segment.Start_Time_Offset;
                    var endIndex            = segment.Start_Time_Offset + segment.Length;
                    var lapDistanceInMeters = 0f;
                    for (int i = startIndex; i < endIndex; i++)
                    {
                        if (speedMetrics is object && i < speedMetrics.Values.Length)
                        {
                            var currentSpeedInMPS = ConvertToMetersPerSecond(speedMetrics.GetValue(i), workoutSamples);
                            lapDistanceInMeters += 1 * currentSpeedInMPS;
                        }
                    }

                    lapMesg.SetTotalDistance(lapDistanceInMeters);
                    stepsAndLaps.Add(lapMesg);

                    stepIndex++;
                }
            }

            return(stepsAndLaps);
        }
        protected override P2GWorkout Convert(Workout workout, WorkoutSamples workoutSamples)
        {
            var result = new P2GWorkout()
            {
                Workout = workout, WorkoutSamples = workoutSamples
            };

            return(result);
        }
        public void CalculateNormalizedPower_With_No_Samples_Returns_Zero()
        {
            var      samples           = new WorkoutSamples(0);
            IAthlete athlete           = new Athlete();
            var      workoutCalculator = new WorkoutSamplesCalculator(samples, athlete);
            var      average           = workoutCalculator.GetNormalizedPower();

            Assert.Equal(0, average);
        }
        public void CalculateVectorAverage_With_No_Samples_Returns_Zero()
        {
            var      samples           = new WorkoutSamples(0);
            IAthlete athlete           = new Athlete();
            var      workoutCalculator = new WorkoutSamplesCalculator(samples, athlete);
            var      average           = workoutCalculator.GetAverageCadence();

            Assert.Equal(0, average);
        }
        public void CalculateNonZero_Average_With_No_Data_Returns_Zero()
        {
            var      samples           = new WorkoutSamples(0);
            var      vector            = new WorkoutSampleVector(3, WorkoutSampleDataType.Power);
            IAthlete athlete           = new Athlete();
            var      workoutCalculator = new WorkoutSamplesCalculator(samples, athlete);
            var      average           = workoutCalculator.CalculateNonZeroVectorAverage(vector);

            Assert.Equal(0, average);
        }
Beispiel #8
0
        protected float GetAvgSpeedMetersPerSecond(WorkoutSamples workoutSamples)
        {
            var speedSummary = GetSpeedSummary(workoutSamples);

            if (speedSummary is null)
            {
                return(0.0f);
            }

            return(ConvertToMetersPerSecond(speedSummary.Average_Value, workoutSamples));
        }
Beispiel #9
0
        protected float GetMaxGrade(WorkoutSamples workoutSamples)
        {
            var gradeSummary = GetGradeSummary(workoutSamples);

            if (gradeSummary is null)
            {
                return(0.0f);
            }

            return((float)gradeSummary.Max_Value);
        }
Beispiel #10
0
        protected Zone GetHeartRateZone(int zone, WorkoutSamples workoutSamples)
        {
            var hrData = GetHeartRateSummary(workoutSamples);

            if (hrData is null)
            {
                return(null);
            }

            return(hrData.Zones?.FirstOrDefault(z => z.Slug == $"zone{zone}"));
        }
        public ICollection <LapMesg> GetLaps(PreferredLapType preferredLapType, WorkoutSamples workoutSamples, Dynastream.Fit.DateTime startTime, Sport sport, SubSport subSport)
        {
            using var tracing = Tracing.Trace($"{nameof(FitConverter)}.{nameof(GetLaps)}")
                                .WithTag(TagKey.Format, FileFormat.Fit.ToString());

            if ((preferredLapType == PreferredLapType.Default || preferredLapType == PreferredLapType.Class_Segments) &&
                workoutSamples.Segment_List.Any())
            {
                return(GetLapsBasedOnSegments(workoutSamples, startTime, sport, subSport));
            }

            return(GetLapsBasedOnDistance(workoutSamples, startTime, sport, subSport));
        }
        protected float GetMaxSpeedMetersPerSecond(WorkoutSamples workoutSamples)
        {
            var speedSummary = GetSpeedSummary(workoutSamples);

            if (speedSummary is null)
            {
                return(0.0f);
            }

            var max = speedSummary.Max_Value.GetValueOrDefault();

            return(ConvertToMetersPerSecond(max, workoutSamples));
        }
        public void GetTotalDistanceTest_NullSummary_Should_Return0()
        {
            var workoutSample = new WorkoutSamples();

            workoutSample.Summaries = null;

            var autoMocker = new AutoMocker();
            var converter  = autoMocker.CreateInstance <ConverterInstance>();

            var converted = converter.GetTotalDistance1(workoutSample);

            converted.Should().Be(0.0f);
        }
        public void GetHeartRateSummary_Metrics_ReturnsNull()
        {
            var workoutSamples = new WorkoutSamples();

            workoutSamples.Metrics = null;

            var autoMocker = new AutoMocker();
            var converter  = autoMocker.CreateInstance <ConverterInstance>();

            var hr = converter.GetHeartRateSummary1(workoutSamples);

            hr.Should().BeNull();
        }
        public void GetCalorieSummary_Summaries_ReturnsNull()
        {
            var workoutSamples = new WorkoutSamples();

            workoutSamples.Summaries = null;

            var autoMocker = new AutoMocker();
            var converter  = autoMocker.CreateInstance <ConverterInstance>();

            var calories = converter.GetCalorieSummary1(workoutSamples);

            calories.Should().BeNull();
        }
        public void GetUserMaxHeartRate_NullMetrics_ReturnsNull()
        {
            var workoutSample = new WorkoutSamples();

            workoutSample.Metrics = null;

            var autoMocker = new AutoMocker();
            var converter  = autoMocker.CreateInstance <ConverterInstance>();

            var hr = converter.GetUserMaxHeartRate1(workoutSample);

            hr.Should().BeNull();
        }
        public void GetHeartRateZone_NullMetrics_ReturnsNull()
        {
            var workoutSample = new WorkoutSamples();

            workoutSample.Metrics = null;

            var autoMocker = new AutoMocker();
            var converter  = autoMocker.CreateInstance <ConverterInstance>();

            var zone = converter.GetHeartRateZone1(1, workoutSample);

            zone.Should().BeNull();
        }
        protected float GetAvgSpeedMetersPerSecond(WorkoutSamples workoutSamples)
        {
            var speedSummary = GetSpeedSummary(workoutSamples);

            if (speedSummary is null)
            {
                return(0.0f);
            }

            var avg = speedSummary.Average_Value.GetValueOrDefault();

            return(ConvertToMetersPerSecond(avg, workoutSamples));
        }
        public void GetAvgSpeedMetersPerSecond_NullMetrics_Returns0()
        {
            var workoutSample = new WorkoutSamples();

            workoutSample.Metrics = null;

            var autoMocker = new AutoMocker();
            var converter  = autoMocker.CreateInstance <ConverterInstance>();

            var converted = converter.GetAvgSpeedMetersPerSecond1(workoutSample);

            converted.Should().Be(0.0f);
        }
Beispiel #20
0
        protected float GetTotalDistance(WorkoutSamples workoutSamples)
        {
            var distanceSummary = GetDistanceSummary(workoutSamples);

            if (distanceSummary is null)
            {
                return(0.0f);
            }

            var unit = distanceSummary.Display_Unit;

            return(ConvertDistanceToMeters(distanceSummary.Value.GetValueOrDefault(), unit));
        }
        public void CalculatCadenceClassificatoion_Under_2_Samples_returns_()
        {
            var samples = new WorkoutSamples(0);
            var vector  = new WorkoutSampleVector(1, WorkoutSampleDataType.Cadence);

            vector.AddPoint(1, 2);
            samples.CadenceVector = vector;
            IAthlete athlete           = new Athlete();
            var      workoutCalculator = new WorkoutSamplesCalculator(samples, athlete);
            var      classification    = workoutCalculator.ClassifyWorkoutCadenceRanges();

            Assert.IsType <List <ICadenceRange> >(classification);
        }
        public void ConvertToMetersPerSecondTest_NullSummary_Should_Return_Original_Value()
        {
            var workoutSample = new WorkoutSamples();

            workoutSample.Summaries = null;

            var autoMocker = new AutoMocker();
            var converter  = autoMocker.CreateInstance <ConverterInstance>();

            var value     = 145;
            var converted = converter.ConvertToMetersPerSecond1(value, workoutSample);

            converted.Should().Be(value);
        }
        public void CalculateNonZero_Average_Returns_Average()
        {
            var samples = new WorkoutSamples(0);
            var vector  = new WorkoutSampleVector(3, WorkoutSampleDataType.Power);

            vector.AddPoint(1, 2);
            vector.AddPoint(2, 4);
            vector.AddPoint(3, 0);
            IAthlete athlete           = new Athlete();
            var      workoutCalculator = new WorkoutSamplesCalculator(samples, athlete);
            var      average           = workoutCalculator.CalculateNonZeroVectorAverage(vector);

            Assert.Equal(3, average);
        }
        public void CalculateNormalizedPower_With_Under_30_Samples_Returns_Average()
        {
            //Initialise();
            var samples = new WorkoutSamples(0);
            var vector  = new WorkoutSampleVector(2, WorkoutSampleDataType.Power);

            vector.AddPoint(1, 2);
            vector.AddPoint(2, 4);
            IAthlete athlete           = new Athlete();
            var      workoutCalculator = new WorkoutSamplesCalculator(samples, athlete);
            var      average           = workoutCalculator.CalculateVectorNormalizedAverage(vector);

            Assert.Equal(3, average);
        }
Beispiel #25
0
        public WorkoutSamples ExtractData()
        {
            if (numSamples <= 0)
            {
                return(new WorkoutSamples(0));
            }
            var woSamples = new WorkoutSamples(numSamples);

            foreach (var sample in _file.workout[0].sample)
            {
                if (sample.pwrSpecified)
                {
                    woSamples.AddPoint(sample.timeoffset, sample.pwr, WorkoutSampleDataType.Power);
                }
                else
                {
                    woSamples.AddPoint(sample.timeoffset, -1, WorkoutSampleDataType.Power);
                }
                if (sample.cadSpecified)
                {
                    woSamples.AddPoint(sample.timeoffset, sample.cad, WorkoutSampleDataType.Cadence);
                }
                else
                {
                    woSamples.AddPoint(sample.timeoffset, -1, WorkoutSampleDataType.Cadence);
                }
                if (sample.hrSpecified)
                {
                    woSamples.AddPoint(sample.timeoffset, sample.hr, WorkoutSampleDataType.HeartRate);
                }
                else
                {
                    woSamples.AddPoint(sample.timeoffset, -1, WorkoutSampleDataType.HeartRate);
                }
                if (sample.spdSpecified)
                {
                    woSamples.AddPoint(sample.timeoffset, sample.hr, WorkoutSampleDataType.Speed);
                }
                else
                {
                    woSamples.AddPoint(sample.timeoffset, -1, WorkoutSampleDataType.Speed);
                }
            }
            woSamples.SummaryTrainingStressScore = ExtractSummaryTSS();
            woSamples.SummaryDuration            = ExtractSummaryDuration();
            woSamples.SummaryWork = ExtractSummaryWork();
            return(woSamples);
        }
Beispiel #26
0
        protected float ConvertToMetersPerSecond(double value, WorkoutSamples workoutSamples)
        {
            var distanceSummary = GetDistanceSummary(workoutSamples);

            if (distanceSummary is null)
            {
                return((float)value);
            }

            var unit            = distanceSummary.Display_Unit;
            var metersPerHour   = ConvertDistanceToMeters(value, unit);
            var metersPerMinute = metersPerHour / 60;
            var metersPerSecond = metersPerMinute / 60;

            return(metersPerSecond);
        }
Beispiel #27
0
        protected Summary GetCalorieSummary(WorkoutSamples workoutSamples)
        {
            if (workoutSamples?.Summaries is null)
            {
                Log.Debug("No workout Summaries found.");
                return(null);
            }

            var summaries       = workoutSamples.Summaries;
            var caloriesSummary = summaries.FirstOrDefault(s => s.Slug == "calories");

            if (caloriesSummary is null)
            {
                Log.Debug("No calories slug found.");
            }

            return(caloriesSummary);
        }
Beispiel #28
0
        private Summary GetDistanceSummary(WorkoutSamples workoutSamples)
        {
            if (workoutSamples?.Summaries is null)
            {
                Log.Debug("No workout Summaries found.");
                return(null);
            }

            var summaries       = workoutSamples.Summaries;
            var distanceSummary = summaries.FirstOrDefault(s => s.Slug == "distance");

            if (distanceSummary is null)
            {
                Log.Debug("No distance slug found.");
            }

            return(distanceSummary);
        }
        public void GetCalorieSummary_NoCalorieSlug_ReturnsNull()
        {
            var workoutSamples = new WorkoutSamples();

            workoutSamples.Summaries = new List <Summary>()
            {
                new Summary()
                {
                    Slug = "something"
                }
            };

            var autoMocker = new AutoMocker();
            var converter  = autoMocker.CreateInstance <ConverterInstance>();

            var calories = converter.GetCalorieSummary1(workoutSamples);

            calories.Should().BeNull();
        }
        public void GetHeartRateSummary_NoCalorieSlug_ReturnsNull()
        {
            var workoutSamples = new WorkoutSamples();

            workoutSamples.Metrics = new List <Metric>()
            {
                new Metric()
                {
                    Slug = "something"
                }
            };

            var autoMocker = new AutoMocker();
            var converter  = autoMocker.CreateInstance <ConverterInstance>();

            var hr = converter.GetHeartRateSummary1(workoutSamples);

            hr.Should().BeNull();
        }