-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathArgCheck.cs
More file actions
195 lines (185 loc) · 8.5 KB
/
Copy pathArgCheck.cs
File metadata and controls
195 lines (185 loc) · 8.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ToolBox.Modules.Utils
{
/// <summary>
/// Argument-checking methods that throw if invalid parameters are seen.
/// </summary>
public static class ArgCheck
{
// Require a > b.
public static void AssertGreaterThan<T>(T a, string aName, T b, string bName) where T : IComparable<T>
{
AssertNonNullNonEmpty(aName, "aName");
AssertNonNullNonEmpty(bName, "bName");
if (a.CompareTo(b) <= 0)
{
throw new ArgumentOutOfRangeException("a", String.Format("Require {0}({1}) > {2}({3}", aName, a.ToString(), bName, b.ToString()));
}
}
public static void AssertGreaterThanOrEqual<T>(T a, string aName, T b, string bName) where T : IComparable<T>
{
AssertNonNullNonEmpty(aName, "aName");
AssertNonNullNonEmpty(bName, "bName");
if (a.CompareTo(b) < 0)
{
throw new ArgumentOutOfRangeException("a", String.Format("Require {0}({1}) >= {2}({3}", aName, a.ToString(), bName, b.ToString()));
}
}
public static void AssertMinLessThanMax<T>(T min, string minName, T max, string maxName) where T : IComparable<T>
{
AssertNonNullNonEmpty(minName, "minName");
AssertNonNullNonEmpty(maxName, "maxName");
if (min.CompareTo(max) >= 0)
{
throw new ArgumentOutOfRangeException("max", String.Format("Require {0}({1}) > {2}({3}", minName, min.ToString(), maxName, max.ToString()));
}
}
/// <summary>
/// Assert that: min <= a <= max, also that min <= max.
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="a"></param>
/// <param name="aName"></param>
/// <param name="min"></param>
/// <param name="minName"></param>
/// <param name="max"></param>
/// <param name="maxName"></param>
public static void AssertInRange<T>(T a, string aName, T min, string minName, T max, string maxName) where T : IComparable<T>
{
AssertNonNullNonEmpty(aName, "aName");
AssertNonNullNonEmpty(minName, "minName");
AssertNonNullNonEmpty(minName, "maxName");
// a.CompareTo(b): < 0 if 'a' precedes 'b' in the sort order, = 0 if equal, > 0 if follows.
if (min.CompareTo(max) > 0) {
throw new ArgumentOutOfRangeException("max", String.Format("Require {0}({1}) <= {2}({3})",
minName, min.ToString(), maxName, max.ToString()));
}
if (min.CompareTo(a) > 0) {
throw new ArgumentOutOfRangeException("a", String.Format("Require {0}({1}) <= {2}({3}",
minName, min.ToString(), aName, a.ToString()));
}
if (a.CompareTo(max) > 0) {
throw new ArgumentOutOfRangeException("a", String.Format("Require {0}({1}) <= {2}({3}",
aName, a.ToString(), maxName, max.ToString()));
}
}
/// <summary>
/// Require string parameter param to be non-null, non-empty.
/// Throw exception with name paramName if null or empty.
/// </summary>
/// <param name="param"></param>
/// <param name="paramName"></param>
public static void AssertNonNullNonEmpty(string param, string paramName)
{
if (string.IsNullOrEmpty(paramName))
{
throw new ArgumentException("Must provide a parameter name", "paramName");
}
if (null == param)
{
throw new ArgumentNullException(String.Format(
"Parameter {0} is null, expected non-null, non-empty string", paramName));
}
if (String.IsNullOrEmpty(param))
{
throw new ArgumentException(String.Format(
"Parameter {0} is empty, expected non-null, non-empty string", paramName));
}
}
/// <summary>
/// Require List<string> parameter param to be non-null, non-empty; does NOT check content strings.
/// Throw exception with name paramName if null or empty.
/// </summary>
/// <param name="param"></param>
/// <param name="paramName"></param>
public static void AssertNonNullNonEmpty(List<string> param, string paramName)
{
if (string.IsNullOrEmpty(paramName)) {
throw new ArgumentException("Must provide a parameter name", "paramName");
}
if (null == param) {
throw new ArgumentNullException(String.Format(
"Parameter {0} is null, expected non-null, non-empty List<string>", paramName));
}
if (0 == param.Count) {
throw new ArgumentException(String.Format(
"Parameter {0} is empty, expected non-null, non-empty List<string>", paramName));
}
}
/// <summary>
/// Require List<string> parameter param to be non-null, non-empty; ditto content strings.
/// Throw exception with name paramName if null or empty.
/// </summary>
/// <param name="param"></param>
/// <param name="paramName"></param>
public static void AssertNonNullNonEmptyEntriesNonNullNonEmpty(List<string> param, string paramName)
{
AssertNonNullNonEmpty(param, paramName);
for (int index = 0; index < param.Count; ++index) {
if (null == param[index]) {
throw new ArgumentNullException(String.Format(
"Parameter {0}[{1}] is null, expected non-null, non-empty List<string>" +
" containing non-null, non-empty strings", paramName, index));
}
if (String.IsNullOrEmpty(param[index])) {
throw new ArgumentNullException(String.Format(
"Parameter {0}[{1}] is empty, expected non-null, non-empty List<string>" +
" containing non-null, non-empty strings", paramName, index));
}
}
}
/// <summary>
/// Require object parameter param to be non-null.
/// Throw exception with name paramName if null or empty.
/// </summary>
/// <param name="param"></param>
/// <param name="paramName"></param>
public static void AssertNonNull(object param, string paramName)
{
if (string.IsNullOrEmpty(paramName))
{
throw new ArgumentException("Must provide a parameter name", "paramName");
}
if (null == param)
{
throw new ArgumentNullException(String.Format(
"Parameter {0} is null, expected non-null", paramName));
}
}
/// <summary>
/// Throw exception with name paramName if param is not false.
/// Require object parameter param to be non-null.
/// </summary>
/// <param name="param"></param>
/// <param name="paramName"></param>
public static void AssertFalse(bool param, string paramName)
{
if (string.IsNullOrEmpty(paramName)) {
throw new ArgumentException("Must provide a parameter name", "paramName");
}
if (false != param) {
throw new ArgumentOutOfRangeException(String.Format(
"Parameter {0} is true, expected false", paramName));
}
}
/// <summary>
/// Throw exception with name paramName if param is not true.
/// Require object parameter param to be non-null.
/// </summary>
/// <param name="param"></param>
/// <param name="paramName"></param>
public static void AssertTrue(bool param, string paramName)
{
if (string.IsNullOrEmpty(paramName)) {
throw new ArgumentException("Must provide a parameter name", "paramName");
}
if (true != param) {
throw new ArgumentOutOfRangeException(String.Format(
"Parameter {0} is false, expected true", paramName));
}
}
}
}