• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

JaCraig / Mecha / 19320675031

13 Nov 2025 04:35AM UTC coverage: 81.73% (-0.6%) from 82.353%
19320675031

push

github

JaCraig
feat(project): update dependencies and target frameworks

Update project dependencies and target frameworks to ensure compatibility with the latest versions and improve maintainability.

- Add BOM to `Mecha.Core.Tests.csproj` file.
- Update `TargetFrameworks` in `Mecha.Core.Tests.csproj` to `net9.0` and `net8.0`.
- Upgrade `Microsoft.CodeAnalysis.NetAnalyzers` to `10.0.100`.
- Upgrade `FileCurator` to `5.1.7`.
- Upgrade `System.Text.Json` to `10.0.0`.

754 of 1060 branches covered (71.13%)

Branch coverage included in aggregate %.

1344 of 1507 relevant lines covered (89.18%)

5151122.47 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

92.31
/Mecha.Core/Generator/DefaultGenerators/DefaultGenerator.cs
1
/*
2
Copyright 2021 James Craig
3

4
Licensed under the Apache License, Version 2.0 (the "License");
5
you may not use this file except in compliance with the License.
6
You may obtain a copy of the License at
7

8
http://www.apache.org/licenses/LICENSE-2.0
9

10
Unless required by applicable law or agreed to in writing, software
11
distributed under the License is distributed on an "AS IS" BASIS,
12
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
See the License for the specific language governing permissions and
14
limitations under the License.
15
*/
16

17
using Mecha.Core.ExtensionMethods;
18
using Mecha.Core.Generator.DefaultGenerators.Utils;
19
using Mecha.Core.Generator.Interfaces;
20
using System;
21
using System.ComponentModel.DataAnnotations;
22
using System.Linq;
23
using System.Reflection;
24

25
namespace Mecha.Core.Generator.DefaultGenerators
26
{
27
    /// <summary>
28
    /// Default generator
29
    /// </summary>
30
    /// <seealso cref="IGenerator"/>
31
    public class DefaultGenerator : IGenerator
32
    {
33
        /// <summary>
34
        /// Initializes a new instance of the <see cref="DefaultGenerator"/> class.
35
        /// </summary>
36
        /// <param name="random">The random.</param>
37
        public DefaultGenerator(Mirage.Random random)
7✔
38
        {
39
            RandomObj = random;
7✔
40
            MethodInfo[] Methods = RandomObj.GetType().GetMethods();
7✔
41
            GenericRandMethod = System.Array.Find(Methods, x => x.IsGenericMethod && x.GetParameters().Length == 2);
35✔
42
        }
7✔
43

44
        /// <summary>
45
        /// Gets the order.
46
        /// </summary>
47
        /// <value>The order.</value>
48
        public int Order => int.MaxValue;
5✔
49

50
        /// <summary>
51
        /// Gets the generic rand method.
52
        /// </summary>
53
        /// <value>The generic rand method.</value>
54
        private MethodInfo? GenericRandMethod { get; }
1,724,151✔
55

56
        /// <summary>
57
        /// Gets the random object.
58
        /// </summary>
59
        /// <value>The random object.</value>
60
        private Mirage.Random RandomObj { get; }
1,724,158✔
61

62
        /// <summary>
63
        /// Determines whether this instance can generate the specified parameter.
64
        /// </summary>
65
        /// <param name="parameter">The parameter.</param>
66
        /// <returns>
67
        /// <c>true</c> if this instance can generate the specified parameter; otherwise, <c>false</c>.
68
        /// </returns>
69
        public bool CanGenerate(ParameterInfo? parameter)
70
        {
71
            return parameter?.HasDefaultValue == false
17,525,808✔
72
                && !parameter.ParameterType.IsInterface
17,525,808✔
73
                && !parameter.ParameterType.IsAbstract
17,525,808✔
74
                && !parameter.ParameterType.IsSpecialType(out Type? _)
17,525,808✔
75
                && (parameter.ParameterType.IsValueType
17,525,808✔
76
                    || parameter.ParameterType.IsEnum
17,525,808✔
77
                    || parameter.ParameterType == typeof(string)
17,525,808✔
78
                    || parameter.ParameterType.GetConstructors().Any(x => x.GetParameters().Length == 0));
24,112,464✔
79
        }
80

81
        /// <summary>
82
        /// Generates the next object of the specified parameter type.
83
        /// </summary>
84
        /// <param name="parameter">The parameter.</param>
85
        /// <param name="min">The minimum.</param>
86
        /// <param name="max">The maximum.</param>
87
        /// <returns>The next object.</returns>
88
        public ParameterValue Next(ParameterInfo? parameter, object? min, object? max)
89
        {
90
            if (parameter is null || !CanGenerate(parameter))
1,724,152✔
91
                return new ParameterValue("Default Generator", null);
1✔
92
            var defaultValue = min;
1,724,151✔
93
            if (min == max)
1,724,151✔
94
            {
95
                max = min = null;
1,722,564✔
96
            }
97
            min = FixMinValue(min, parameter);
1,724,151✔
98
            max = FixMaxValue(max, parameter);
1,724,151✔
99
            if (min is not null
1,724,151✔
100
                && max is not null
1,724,151✔
101
                && min.GetType() == max.GetType()
1,724,151✔
102
                && min is IComparable MinValue
1,724,151✔
103
                && max is IComparable MaxValue
1,724,151✔
104
                && MinValue.CompareTo(MaxValue) > 0)
1,724,151✔
105
            {
106
                (max, min) = (min, max);
25✔
107
            }
108

109
            try
110
            {
111
                MethodInfo? GenericMethod = GenericRandMethod?.MakeGenericMethod(parameter.ParameterType);
1,724,151!
112
                return new ParameterValue("Default Generator", GetValue(parameter, min, max, GenericMethod));
1,724,151✔
113
            }
114
            catch (Exception) { return new ParameterValue("Default Generator", defaultValue); }
×
115
        }
1,724,151✔
116

117
        /// <summary>
118
        /// Fixes the maximum value.
119
        /// </summary>
120
        /// <param name="value">The value.</param>
121
        /// <param name="parameter">The parameter.</param>
122
        /// <returns></returns>
123
        private static object? FixMaxValue(object? value, ParameterInfo parameter)
124
        {
125
            var Key = parameter.ParameterType.GetHashCode();
1,724,151✔
126
            RangeAttribute? Range = parameter.GetCustomAttribute<RangeAttribute>();
1,724,151✔
127
            return value is not null || !(MaxValueLookup.Max?.ContainsKey(Key) ?? false)
1,724,151!
128
                ? value
1,724,151✔
129
                : Range?.Maximum ?? MaxValueLookup.Max?[Key] ?? false;
1,724,151✔
130
        }
131

132
        /// <summary>
133
        /// Fixes the minimum value.
134
        /// </summary>
135
        /// <param name="value">The value.</param>
136
        /// <param name="parameter">The parameter.</param>
137
        /// <returns></returns>
138
        private static object? FixMinValue(object? value, ParameterInfo parameter)
139
        {
140
            var Key = parameter.ParameterType.GetHashCode();
1,724,151✔
141
            RangeAttribute? Range = parameter.GetCustomAttribute<RangeAttribute>();
1,724,151✔
142
            return value is not null || !(MinValueLookup.Min?.ContainsKey(Key) ?? false)
1,724,151!
143
                ? value
1,724,151✔
144
                : Range?.Minimum ?? MinValueLookup.Min?[Key] ?? false;
1,724,151✔
145
        }
146

147
        /// <summary>
148
        /// Gets the value.
149
        /// </summary>
150
        /// <param name="parameter">The parameter.</param>
151
        /// <param name="min">The minimum.</param>
152
        /// <param name="max">The maximum.</param>
153
        /// <param name="genericMethod">The generic method.</param>
154
        /// <returns></returns>
155
        private object? GetValue(ParameterInfo parameter, object? min, object? max, MethodInfo? genericMethod)
156
        {
157
            return parameter.ParameterType.IsPrimitive
1,724,151!
158
                    ? genericMethod?.Invoke(RandomObj, [min, max])
1,724,151✔
159
                    : RandomObj.Next(parameter.ParameterType);
1,724,151✔
160
        }
161
    }
162
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc