Skip to content

Commit 940697a

Browse files
committed
Add missing (u)short constructors, add To* methods without formatter
1 parent 74150b4 commit 940697a

5 files changed

Lines changed: 161 additions & 3 deletions

File tree

ValveKeyValue/ValveKeyValue.Test/ConversionCoverageTestCase.cs

Lines changed: 99 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,105 @@ namespace ValveKeyValue.Test
66
{
77
class ConversionCoverageTestCase
88
{
9-
#region Missing implicit operators (short, ushort, IntPtr)
9+
#region Short and ushort constructors
10+
11+
[Test]
12+
public void ShortConstructorPreservesType()
13+
{
14+
var obj = new KVObject((short)42);
15+
Assert.That(obj.ValueType, Is.EqualTo(KVValueType.Int16));
16+
Assert.That((short)obj, Is.EqualTo((short)42));
17+
}
18+
19+
[Test]
20+
public void UShortConstructorPreservesType()
21+
{
22+
var obj = new KVObject((ushort)42);
23+
Assert.That(obj.ValueType, Is.EqualTo(KVValueType.UInt16));
24+
Assert.That((ushort)obj, Is.EqualTo((ushort)42));
25+
}
26+
27+
[Test]
28+
public void ShortConstructorMatchesImplicitOperator()
29+
{
30+
var fromCtor = new KVObject((short)-100);
31+
KVObject fromOp = (short)-100;
32+
Assert.That(fromCtor.ValueType, Is.EqualTo(fromOp.ValueType));
33+
Assert.That((short)fromCtor, Is.EqualTo((short)fromOp));
34+
}
35+
36+
[Test]
37+
public void UShortConstructorMatchesImplicitOperator()
38+
{
39+
var fromCtor = new KVObject((ushort)500);
40+
KVObject fromOp = (ushort)500;
41+
Assert.That(fromCtor.ValueType, Is.EqualTo(fromOp.ValueType));
42+
Assert.That((ushort)fromCtor, Is.EqualTo((ushort)fromOp));
43+
}
44+
45+
#endregion
46+
47+
#region Convenience conversion overloads
48+
49+
[Test]
50+
public void ToByte_FromInt()
51+
{
52+
KVObject obj = 42;
53+
Assert.That(obj.ToByte(null), Is.EqualTo((byte)42));
54+
}
55+
56+
[Test]
57+
public void ToSByte_FromInt()
58+
{
59+
KVObject obj = -42;
60+
Assert.That(obj.ToSByte(null), Is.EqualTo((sbyte)-42));
61+
}
62+
63+
[Test]
64+
public void ToChar_FromString()
65+
{
66+
KVObject obj = "A";
67+
Assert.That(obj.ToChar(null), Is.EqualTo('A'));
68+
}
69+
70+
[Test]
71+
public void ToInt16_FromShort()
72+
{
73+
KVObject obj = (short)-1000;
74+
Assert.That(obj.ToInt16(null), Is.EqualTo((short)-1000));
75+
}
76+
77+
[Test]
78+
public void ToUInt16_FromUShort()
79+
{
80+
KVObject obj = (ushort)1000;
81+
Assert.That(obj.ToUInt16(null), Is.EqualTo((ushort)1000));
82+
}
83+
84+
[Test]
85+
public void ToUInt32_FromUInt()
86+
{
87+
KVObject obj = 42U;
88+
Assert.That(obj.ToUInt32(null), Is.EqualTo(42U));
89+
}
90+
91+
[Test]
92+
public void ToUInt64_FromULong()
93+
{
94+
KVObject obj = 42UL;
95+
Assert.That(obj.ToUInt64(null), Is.EqualTo(42UL));
96+
}
97+
98+
[Test]
99+
public void ToDecimal_FromString()
100+
{
101+
KVObject obj = "79228162514264337593543950335";
102+
Assert.That(obj.ToDecimal(null), Is.EqualTo(79228162514264337593543950335m));
103+
}
104+
105+
#endregion
106+
107+
#region Implicit operators (short, ushort, IntPtr)
10108

11109
[Test]
12110
public void ImplicitShortToKVObject()

ValveKeyValue/ValveKeyValue.Test/Test Data/apisurface.txt

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,24 +65,32 @@ public class ValveKeyValue.KVDocument
6565
public void set_Item(string key, ValveKeyValue.KVObject value);
6666
public bool ToBoolean();
6767
public bool ToBoolean(IFormatProvider provider);
68+
public byte ToByte();
6869
public byte ToByte(IFormatProvider provider);
70+
public char ToChar();
6971
public char ToChar(IFormatProvider provider);
72+
public decimal ToDecimal();
7073
public decimal ToDecimal(IFormatProvider provider);
7174
public double ToDouble();
7275
public double ToDouble(IFormatProvider provider);
76+
public short ToInt16();
7377
public short ToInt16(IFormatProvider provider);
7478
public int ToInt32();
7579
public int ToInt32(IFormatProvider provider);
7680
public long ToInt64();
7781
public long ToInt64(IFormatProvider provider);
82+
public sbyte ToSByte();
7883
public sbyte ToSByte(IFormatProvider provider);
7984
public float ToSingle();
8085
public float ToSingle(IFormatProvider provider);
8186
public string ToString();
8287
public string ToString(IFormatProvider provider);
8388
public object ToType(Type conversionType, IFormatProvider provider);
89+
public ushort ToUInt16();
8490
public ushort ToUInt16(IFormatProvider provider);
91+
public uint ToUInt32();
8592
public uint ToUInt32(IFormatProvider provider);
93+
public ulong ToUInt64();
8694
public ulong ToUInt64(IFormatProvider provider);
8795
public bool TryAdd(string key, ValveKeyValue.KVObject value);
8896
public bool TryGetValue(string name, out ValveKeyValue.KVObject& child);
@@ -150,9 +158,11 @@ public class ValveKeyValue.KVObject
150158
public .ctor(int value);
151159
public .ctor(IntPtr value);
152160
public .ctor(long value);
161+
public .ctor(short value);
153162
public .ctor(string value);
154163
public .ctor(uint value);
155164
public .ctor(ulong value);
165+
public .ctor(ushort value);
156166
public void Add(string key, ValveKeyValue.KVObject value);
157167
public void Add(ValveKeyValue.KVObject value);
158168
public static ValveKeyValue.KVObject Array();
@@ -221,24 +231,32 @@ public class ValveKeyValue.KVObject
221231
public void set_Item(string key, ValveKeyValue.KVObject value);
222232
public bool ToBoolean();
223233
public bool ToBoolean(IFormatProvider provider);
234+
public byte ToByte();
224235
public byte ToByte(IFormatProvider provider);
236+
public char ToChar();
225237
public char ToChar(IFormatProvider provider);
238+
public decimal ToDecimal();
226239
public decimal ToDecimal(IFormatProvider provider);
227240
public double ToDouble();
228241
public double ToDouble(IFormatProvider provider);
242+
public short ToInt16();
229243
public short ToInt16(IFormatProvider provider);
230244
public int ToInt32();
231245
public int ToInt32(IFormatProvider provider);
232246
public long ToInt64();
233247
public long ToInt64(IFormatProvider provider);
248+
public sbyte ToSByte();
234249
public sbyte ToSByte(IFormatProvider provider);
235250
public float ToSingle();
236251
public float ToSingle(IFormatProvider provider);
237252
public string ToString();
238253
public string ToString(IFormatProvider provider);
239254
public object ToType(Type conversionType, IFormatProvider provider);
255+
public ushort ToUInt16();
240256
public ushort ToUInt16(IFormatProvider provider);
257+
public uint ToUInt32();
241258
public uint ToUInt32(IFormatProvider provider);
259+
public ulong ToUInt64();
242260
public ulong ToUInt64(IFormatProvider provider);
243261
public bool TryAdd(string key, ValveKeyValue.KVObject value);
244262
public bool TryGetValue(string name, out ValveKeyValue.KVObject& child);

ValveKeyValue/ValveKeyValue/KVObject.cs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,24 @@ public KVObject(bool value)
9191
_scalar = value ? 1L : 0L;
9292
}
9393

94+
/// <summary>
95+
/// Initializes a new instance of the <see cref="KVObject"/> class with a 16-bit integer value.
96+
/// </summary>
97+
public KVObject(short value)
98+
{
99+
ValueType = KVValueType.Int16;
100+
_scalar = value;
101+
}
102+
103+
/// <summary>
104+
/// Initializes a new instance of the <see cref="KVObject"/> class with an unsigned 16-bit integer value.
105+
/// </summary>
106+
public KVObject(ushort value)
107+
{
108+
ValueType = KVValueType.UInt16;
109+
_scalar = value;
110+
}
111+
94112
/// <summary>
95113
/// Initializes a new instance of the <see cref="KVObject"/> class with an integer value.
96114
/// </summary>

ValveKeyValue/ValveKeyValue/KVObject_IConvertible.cs

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,18 +47,42 @@ public partial class KVObject : IConvertible
4747
/// <summary>Converts this value to a <see cref="bool"/>.</summary>
4848
public bool ToBoolean() => ToBoolean(null);
4949

50+
/// <summary>Converts this value to a <see cref="byte"/>.</summary>
51+
public byte ToByte() => ToByte(null);
52+
53+
/// <summary>Converts this value to an <see cref="sbyte"/>.</summary>
54+
public sbyte ToSByte() => ToSByte(null);
55+
56+
/// <summary>Converts this value to a <see cref="char"/>.</summary>
57+
public char ToChar() => ToChar(null);
58+
59+
/// <summary>Converts this value to a <see cref="short"/>.</summary>
60+
public short ToInt16() => ToInt16(null);
61+
62+
/// <summary>Converts this value to a <see cref="ushort"/>.</summary>
63+
public ushort ToUInt16() => ToUInt16(null);
64+
5065
/// <summary>Converts this value to an <see cref="int"/>.</summary>
5166
public int ToInt32() => ToInt32(null);
5267

68+
/// <summary>Converts this value to a <see cref="uint"/>.</summary>
69+
public uint ToUInt32() => ToUInt32(null);
70+
5371
/// <summary>Converts this value to a <see cref="long"/>.</summary>
5472
public long ToInt64() => ToInt64(null);
5573

74+
/// <summary>Converts this value to a <see cref="ulong"/>.</summary>
75+
public ulong ToUInt64() => ToUInt64(null);
76+
5677
/// <summary>Converts this value to a <see cref="float"/>.</summary>
5778
public float ToSingle() => ToSingle(null);
5879

5980
/// <summary>Converts this value to a <see cref="double"/>.</summary>
6081
public double ToDouble() => ToDouble(null);
6182

83+
/// <summary>Converts this value to a <see cref="decimal"/>.</summary>
84+
public decimal ToDecimal() => ToDecimal(null);
85+
6286
/// <inheritdoc/>
6387
public override string ToString() => ToString(CultureInfo.InvariantCulture);
6488

ValveKeyValue/ValveKeyValue/KVObject_operators.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,10 @@ public partial class KVObject
2929
public static implicit operator KVObject(uint value) => new(value);
3030

3131
/// <summary>Implicit cast from <see cref="short"/> to <see cref="KVObject"/>.</summary>
32-
public static implicit operator KVObject(short value) => new(KVValueType.Int16, (long)value);
32+
public static implicit operator KVObject(short value) => new(value);
3333

3434
/// <summary>Implicit cast from <see cref="ushort"/> to <see cref="KVObject"/>.</summary>
35-
public static implicit operator KVObject(ushort value) => new(KVValueType.UInt16, (long)value);
35+
public static implicit operator KVObject(ushort value) => new(value);
3636

3737
/// <summary>Implicit cast from <see cref="byte"/> to <see cref="KVObject"/>. The value is widened to <see cref="int"/>.</summary>
3838
public static implicit operator KVObject(byte value) => new((int)value);

0 commit comments

Comments
 (0)