Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 26 additions & 0 deletions csharp/Platform.Converters.Tests/ConverterTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -52,5 +52,31 @@ public static void ObjectTest()
TestObjectConversion(true);
}
private static void TestObjectConversion<T>(T value) => Assert.Equal(value, UncheckedConverter<object, T>.Default.Convert(value));

[Fact]
public static void ToStringTest()
{
var uncheckedConverter = UncheckedConverter<int, ulong>.Default;
var checkedConverter = CheckedConverter<int, ulong>.Default;
var signExtendingConverter = UncheckedSignExtendingConverter<byte, long>.Default;
var cachingDecorator = new CachingConverterDecorator<int, ulong>(uncheckedConverter);

Assert.Contains("UncheckedConverter", uncheckedConverter.ToString());
Assert.Contains("Int32", uncheckedConverter.ToString());
Assert.Contains("UInt64", uncheckedConverter.ToString());

Assert.Contains("CheckedConverter", checkedConverter.ToString());
Assert.Contains("Int32", checkedConverter.ToString());
Assert.Contains("UInt64", checkedConverter.ToString());

Assert.Contains("UncheckedSignExtendingConverter", signExtendingConverter.ToString());
Assert.Contains("Byte", signExtendingConverter.ToString());
Assert.Contains("Int64", signExtendingConverter.ToString());

Assert.Contains("CachingConverterDecorator", cachingDecorator.ToString());
Assert.Contains("Int32", cachingDecorator.ToString());
Assert.Contains("UInt64", cachingDecorator.ToString());
Assert.Contains("UncheckedConverter", cachingDecorator.ToString());
}
}
}
8 changes: 8 additions & 0 deletions csharp/Platform.Converters/CachingConverterDecorator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -64,5 +64,13 @@ public class CachingConverterDecorator<TSource, TTarget> : IConverter<TSource, T
/// </returns>
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public TTarget Convert(TSource source) => _cache.GetOrAdd(source, _baseConverter.Convert);

/// <summary>
/// <para>Returns a string that represents the current caching converter decorator.</para>
/// <para>Возвращает строку, представляющую текущий декоратор кэширующего конвертера.</para>
/// </summary>
/// <returns><para>A string that represents the current caching converter decorator.</para><para>Строка, представляющая текущий декоратор кэширующего конвертера.</para></returns>
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public override string ToString() => $"{GetType().Name}<{typeof(TSource).Name}, {typeof(TTarget).Name}>({_baseConverter})";
}
}
8 changes: 8 additions & 0 deletions csharp/Platform.Converters/ConverterBase.cs
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,14 @@ public abstract class ConverterBase<TSource, TTarget> : IConverter<TSource, TTar
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public abstract TTarget Convert(TSource source);

/// <summary>
/// <para>Returns a string that represents the current converter.</para>
/// <para>Возвращает строку, представляющую текущий конвертер.</para>
/// </summary>
/// <returns><para>A string that represents the current converter.</para><para>Строка, представляющая текущий конвертер.</para></returns>
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public override string ToString() => $"{GetType().BaseType?.Name ?? GetType().Name}<{typeof(TSource).Name}, {typeof(TTarget).Name}>";

/// <summary>
/// <para>Generates a sequence of instructions using <see cref="ILGenerator"/> that converts a value of type <see cref="System.Object"/> to a value of type <typeparamref name="TTarget"/>.</para>
/// <para>Генерирует последовательность инструкций при помощи <see cref="ILGenerator"/> выполняющую преобразование значения типа <see cref="System.Object"/> к значению типа <typeparamref name="TTarget"/>.</para>
Expand Down
Loading