From faa226d484553e3a70dce9bb345a6ba356254fae Mon Sep 17 00:00:00 2001 From: kzrnm Date: Mon, 25 Sep 2023 21:53:59 +0900 Subject: [PATCH 1/6] Update CompetitiveVerifier --- .../ac-library-csharp.LibraryChecker.csproj | 2 +- Test/ac-library-csharp.Test/ac-library-csharp.Test.csproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Test/ac-library-csharp.LibraryChecker/ac-library-csharp.LibraryChecker.csproj b/Test/ac-library-csharp.LibraryChecker/ac-library-csharp.LibraryChecker.csproj index 7aa9f5f..336e2e7 100644 --- a/Test/ac-library-csharp.LibraryChecker/ac-library-csharp.LibraryChecker.csproj +++ b/Test/ac-library-csharp.LibraryChecker/ac-library-csharp.LibraryChecker.csproj @@ -10,7 +10,7 @@ - + diff --git a/Test/ac-library-csharp.Test/ac-library-csharp.Test.csproj b/Test/ac-library-csharp.Test/ac-library-csharp.Test.csproj index 5b994c2..e6cc545 100644 --- a/Test/ac-library-csharp.Test/ac-library-csharp.Test.csproj +++ b/Test/ac-library-csharp.Test/ac-library-csharp.Test.csproj @@ -40,7 +40,7 @@ all runtime; build; native; contentfiles; analyzers; buildtransitive - + all runtime; build; native; contentfiles; analyzers From cb8a973729ba94cad88012ce46110bd441f69bfd Mon Sep 17 00:00:00 2001 From: kzrnm Date: Wed, 25 Oct 2023 18:53:12 +0900 Subject: [PATCH 2/6] Move `IStaticMod` to IModInterface.cs --- .../ac-library-csharp/Math/ModInt/IModInt.cs | 29 -------- .../Math/ModInt/IModInterface.cs | 66 +++++++++++++++++++ .../Math/ModInt/StaticModInt.cs | 42 +----------- 3 files changed, 68 insertions(+), 69 deletions(-) delete mode 100644 Source/ac-library-csharp/Math/ModInt/IModInt.cs create mode 100644 Source/ac-library-csharp/Math/ModInt/IModInterface.cs diff --git a/Source/ac-library-csharp/Math/ModInt/IModInt.cs b/Source/ac-library-csharp/Math/ModInt/IModInt.cs deleted file mode 100644 index 2c49cfc..0000000 --- a/Source/ac-library-csharp/Math/ModInt/IModInt.cs +++ /dev/null @@ -1,29 +0,0 @@ -#if GENERIC_MATH -using System.Numerics; -#endif - -namespace AtCoder -{ - public interface IModInt -#if GENERIC_MATH - : INumberBase where T : INumberBase -#endif - { - /// - /// 自身を x として、 xy≡1 なる y を返します。 - /// - /// - /// 制約: gcd(x, mod) = 1 - /// - T Inv(); - - /// - /// 自身を x として、x^ を返します。 - /// - /// - /// 制約: 0≤|| - /// 計算量: O(log()) - /// - T Pow(ulong n); - } -} diff --git a/Source/ac-library-csharp/Math/ModInt/IModInterface.cs b/Source/ac-library-csharp/Math/ModInt/IModInterface.cs new file mode 100644 index 0000000..e1f2566 --- /dev/null +++ b/Source/ac-library-csharp/Math/ModInt/IModInterface.cs @@ -0,0 +1,66 @@ +#if GENERIC_MATH +using System.Numerics; +#endif + +namespace AtCoder +{ + public interface IModInt +#if GENERIC_MATH + : INumberBase where T : INumberBase +#endif + { + /// + /// 自身を x として、 xy≡1 なる y を返します。 + /// + /// + /// 制約: gcd(x, mod) = 1 + /// + T Inv(); + + /// + /// 自身を x として、x^ を返します。 + /// + /// + /// 制約: 0≤|| + /// 計算量: O(log()) + /// + T Pow(ulong n); + } + + /// + /// コンパイル時に決定する mod を表します。 + /// + /// + /// + /// public readonly struct Mod1000000009 : IStaticMod + /// { + /// public uint Mod => 1000000009; + /// public bool IsPrime => true; + /// } + /// + /// + [IsOperator] + public interface IStaticMod + { + /// + /// mod を取得します。 + /// + uint Mod { get; } + + /// + /// mod が素数であるか識別します。 + /// + bool IsPrime { get; } + } + public readonly struct Mod1000000007 : IStaticMod + { + public uint Mod => 1000000007; + public bool IsPrime => true; + } + + public readonly struct Mod998244353 : IStaticMod + { + public uint Mod => 998244353; + public bool IsPrime => true; + } +} diff --git a/Source/ac-library-csharp/Math/ModInt/StaticModInt.cs b/Source/ac-library-csharp/Math/ModInt/StaticModInt.cs index 76a4fdc..6b1e925 100644 --- a/Source/ac-library-csharp/Math/ModInt/StaticModInt.cs +++ b/Source/ac-library-csharp/Math/ModInt/StaticModInt.cs @@ -8,43 +8,6 @@ namespace AtCoder { - /// - /// コンパイル時に決定する mod を表します。 - /// - /// - /// - /// public readonly struct Mod1000000009 : IStaticMod - /// { - /// public uint Mod => 1000000009; - /// public bool IsPrime => true; - /// } - /// - /// - [IsOperator] - public interface IStaticMod - { - /// - /// mod を取得します。 - /// - uint Mod { get; } - - /// - /// mod が素数であるか識別します。 - /// - bool IsPrime { get; } - } - public readonly struct Mod1000000007 : IStaticMod - { - public uint Mod => 1000000007; - public bool IsPrime => true; - } - - public readonly struct Mod998244353 : IStaticMod - { - public uint Mod => 998244353; - public bool IsPrime => true; - } - /// /// 四則演算時に自動で mod を取る整数型。mod の値はコンパイル時に決定している必要があります。 /// @@ -61,9 +24,8 @@ public interface IStaticMod /// } /// /// - public readonly struct StaticModInt - : IEquatable>, IFormattable, IModInt> - where T : struct, IStaticMod + public readonly struct StaticModInt : IEquatable>, IFormattable, IModInt> + where T : struct, IStaticMod { internal readonly uint _v; private static readonly T op = default; From de8ef250170b391c9413dc0328efd187eae658b1 Mon Sep 17 00:00:00 2001 From: kzrnm Date: Wed, 25 Oct 2023 18:53:42 +0900 Subject: [PATCH 3/6] Add `IModInt.Value` and `IModInt.Mod` --- .../ac-library-csharp/Math/ModInt/IModInterface.cs | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/Source/ac-library-csharp/Math/ModInt/IModInterface.cs b/Source/ac-library-csharp/Math/ModInt/IModInterface.cs index e1f2566..99279c2 100644 --- a/Source/ac-library-csharp/Math/ModInt/IModInterface.cs +++ b/Source/ac-library-csharp/Math/ModInt/IModInterface.cs @@ -25,6 +25,18 @@ public interface IModInt /// 計算量: O(log()) /// T Pow(ulong n); + + /// + /// 格納されている値を返します。 + /// + int Value { get; } + +#if GENERIC_MATH + /// + /// mod を返します。 + /// + abstract static int Mod { get; } +#endif } /// From f30cdb7fda822abb59723828249f778fbb88298e Mon Sep 17 00:00:00 2001 From: kzrnm Date: Wed, 25 Oct 2023 18:58:59 +0900 Subject: [PATCH 4/6] Add Expand.Test --- Directory.Build.props | 2 ++ .../ac-library-csharp.csproj | 2 +- Test/Expand.Test/Expand.Test.csproj | 25 +++++++++++++++++++ Test/Expand.Test/Program.cs | 9 +++++++ .../ac-library-csharp.Test.csproj | 4 +-- ac-library-csharp.sln | 11 ++++++-- 6 files changed, 48 insertions(+), 5 deletions(-) create mode 100644 Test/Expand.Test/Expand.Test.csproj create mode 100644 Test/Expand.Test/Program.cs diff --git a/Directory.Build.props b/Directory.Build.props index 7caae28..9e7d998 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -19,6 +19,8 @@ true $(DefineConstants);EMBEDDING + 5.5.1 + true true snupkg diff --git a/Source/ac-library-csharp/ac-library-csharp.csproj b/Source/ac-library-csharp/ac-library-csharp.csproj index 24adf93..bf3f059 100644 --- a/Source/ac-library-csharp/ac-library-csharp.csproj +++ b/Source/ac-library-csharp/ac-library-csharp.csproj @@ -41,7 +41,7 @@ false Analyzer - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/Test/Expand.Test/Expand.Test.csproj b/Test/Expand.Test/Expand.Test.csproj new file mode 100644 index 0000000..11c0340 --- /dev/null +++ b/Test/Expand.Test/Expand.Test.csproj @@ -0,0 +1,25 @@ + + + + Exe + net7.0;netcoreapp3.1 + annotations + + 8 + 11 + + $(NoWarn);CS0436;CS8981;CS0649 + true + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + + diff --git a/Test/Expand.Test/Program.cs b/Test/Expand.Test/Program.cs new file mode 100644 index 0000000..e13fff9 --- /dev/null +++ b/Test/Expand.Test/Program.cs @@ -0,0 +1,9 @@ +partial class Program +{ + static void Main() + { +#if EMBEDDING + System.Console.WriteLine(SourceExpander.Testing.AtCoder.MathLib.PowMod(255, 1L << 52, 12)); +#endif + } +} diff --git a/Test/ac-library-csharp.Test/ac-library-csharp.Test.csproj b/Test/ac-library-csharp.Test/ac-library-csharp.Test.csproj index e6cc545..1ace234 100644 --- a/Test/ac-library-csharp.Test/ac-library-csharp.Test.csproj +++ b/Test/ac-library-csharp.Test/ac-library-csharp.Test.csproj @@ -44,11 +44,11 @@ all runtime; build; native; contentfiles; analyzers - + - + diff --git a/ac-library-csharp.sln b/ac-library-csharp.sln index e00a91f..4173343 100644 --- a/ac-library-csharp.sln +++ b/ac-library-csharp.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 16 -VisualStudioVersion = 16.0.30413.136 +# Visual Studio Version 17 +VisualStudioVersion = 17.7.34031.279 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ac-library-csharp", "Source\ac-library-csharp\ac-library-csharp.csproj", "{7915FF27-0322-4460-A94E-FA7B86D5E25C}" EndProject @@ -24,6 +24,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AtCoderAnalyzer.Test", "Tes EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ac-library-csharp.LibraryChecker", "Test\ac-library-csharp.LibraryChecker\ac-library-csharp.LibraryChecker.csproj", "{D61D3584-B86E-4C1F-BB8A-A1747A60E834}" EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Expand.Test", "Test\Expand.Test\Expand.Test.csproj", "{5121294D-76A4-44D4-8C2C-36B29FC162E4}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -50,6 +52,10 @@ Global {D61D3584-B86E-4C1F-BB8A-A1747A60E834}.Debug|Any CPU.Build.0 = Debug|Any CPU {D61D3584-B86E-4C1F-BB8A-A1747A60E834}.Release|Any CPU.ActiveCfg = Release|Any CPU {D61D3584-B86E-4C1F-BB8A-A1747A60E834}.Release|Any CPU.Build.0 = Release|Any CPU + {5121294D-76A4-44D4-8C2C-36B29FC162E4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5121294D-76A4-44D4-8C2C-36B29FC162E4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5121294D-76A4-44D4-8C2C-36B29FC162E4}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5121294D-76A4-44D4-8C2C-36B29FC162E4}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -58,6 +64,7 @@ Global {D0662927-8142-43D2-ABA9-C1977107F0ED} = {573A3DC6-BEB2-4E3A-8EB3-E4CB88F3C8F1} {522A1037-5060-4CBA-A4A3-99624FAD732E} = {573A3DC6-BEB2-4E3A-8EB3-E4CB88F3C8F1} {D61D3584-B86E-4C1F-BB8A-A1747A60E834} = {573A3DC6-BEB2-4E3A-8EB3-E4CB88F3C8F1} + {5121294D-76A4-44D4-8C2C-36B29FC162E4} = {573A3DC6-BEB2-4E3A-8EB3-E4CB88F3C8F1} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {3DF2A5DC-C174-486C-A24B-1F08FAA0D4F5} From 54365102fc7de4771cbbfaf60e8672e4fa35ed21 Mon Sep 17 00:00:00 2001 From: kzrnm Date: Wed, 25 Oct 2023 18:59:10 +0900 Subject: [PATCH 5/6] Remove DebugView from expanded code --- .../DataStructure/FenwickTree.GenericMath.cs | 6 ++- .../DataStructure/FenwickTree.cs | 6 ++- .../DataStructure/LazySegtree.cs | 6 ++- .../DataStructure/Segtree.cs | 6 ++- .../STL/PriorityQueue/PriorityQueueOp.cs | 4 ++ .../STL/PriorityQueue/PriorityQueueOp`2.cs | 4 ++ .../SourceExpanderTest.cs | 43 ++++--------------- 7 files changed, 37 insertions(+), 38 deletions(-) diff --git a/Source/ac-library-csharp/DataStructure/FenwickTree.GenericMath.cs b/Source/ac-library-csharp/DataStructure/FenwickTree.GenericMath.cs index f6f66d6..a7c18b1 100644 --- a/Source/ac-library-csharp/DataStructure/FenwickTree.GenericMath.cs +++ b/Source/ac-library-csharp/DataStructure/FenwickTree.GenericMath.cs @@ -89,7 +89,9 @@ public TValue Sum(int r) [MethodImpl(256)] public TValue Slice(int l, int len) => Sum(l, l + len); +#if EMBEDDING [SourceExpander.NotEmbeddingSource] +#endif [DebuggerDisplay("Value = {" + nameof(Value) + "}, Sum = {" + nameof(Sum) + "}")] internal readonly struct DebugItem { @@ -101,6 +103,9 @@ public DebugItem(TValue value, TValue sum) public TValue Value { get; } public TValue Sum { get; } } +#if EMBEDDING + [SourceExpander.NotEmbeddingSource] +#endif private class DebugView { private readonly FenwickTree fw; @@ -109,7 +114,6 @@ public DebugView(FenwickTree fenwickTree) fw = fenwickTree; } [DebuggerBrowsable(DebuggerBrowsableState.RootHidden)] - [SourceExpander.NotEmbeddingSource] public DebugItem[] Items { get diff --git a/Source/ac-library-csharp/DataStructure/FenwickTree.cs b/Source/ac-library-csharp/DataStructure/FenwickTree.cs index d8ce74d..796c969 100644 --- a/Source/ac-library-csharp/DataStructure/FenwickTree.cs +++ b/Source/ac-library-csharp/DataStructure/FenwickTree.cs @@ -95,7 +95,9 @@ public TValue Sum(int r) [MethodImpl(256)] public TValue Slice(int l, int len) => Sum(l, l + len); +#if EMBEDDING [SourceExpander.NotEmbeddingSource] +#endif [DebuggerDisplay("Value = {" + nameof(Value) + "}, Sum = {" + nameof(Sum) + "}")] internal readonly struct DebugItem { @@ -107,6 +109,9 @@ public DebugItem(TValue value, TValue sum) public TValue Value { get; } public TValue Sum { get; } } +#if EMBEDDING + [SourceExpander.NotEmbeddingSource] +#endif private class DebugView { private readonly FenwickTree fw; @@ -115,7 +120,6 @@ public DebugView(FenwickTree fenwickTree) fw = fenwickTree; } [DebuggerBrowsable(DebuggerBrowsableState.RootHidden)] - [SourceExpander.NotEmbeddingSource] public DebugItem[] Items { get diff --git a/Source/ac-library-csharp/DataStructure/LazySegtree.cs b/Source/ac-library-csharp/DataStructure/LazySegtree.cs index cb302cf..1c5440a 100644 --- a/Source/ac-library-csharp/DataStructure/LazySegtree.cs +++ b/Source/ac-library-csharp/DataStructure/LazySegtree.cs @@ -349,7 +349,9 @@ public int MinLeft(int r, Predicate g) return 0; } +#if EMBEDDING [SourceExpander.NotEmbeddingSource] +#endif [DebuggerDisplay("Value = {" + nameof(Value) + "}, Lazy = {" + nameof(Lazy) + "}", Name = "{" + nameof(Key) + ",nq}")] internal readonly struct DebugItem { @@ -369,6 +371,9 @@ public DebugItem(int l, int r, TValue value, F lazy) public TValue Value { get; } public F Lazy { get; } } +#if EMBEDDING + [SourceExpander.NotEmbeddingSource] +#endif private class DebugView { private readonly LazySegtree s; @@ -377,7 +382,6 @@ public DebugView(LazySegtree segtree) s = segtree; } [DebuggerBrowsable(DebuggerBrowsableState.RootHidden)] - [SourceExpander.NotEmbeddingSource] public DebugItem[] Items { get diff --git a/Source/ac-library-csharp/DataStructure/Segtree.cs b/Source/ac-library-csharp/DataStructure/Segtree.cs index d9fde3b..1063cf0 100644 --- a/Source/ac-library-csharp/DataStructure/Segtree.cs +++ b/Source/ac-library-csharp/DataStructure/Segtree.cs @@ -252,7 +252,9 @@ public int MinLeft(int r, Predicate f) return 0; } +#if EMBEDDING [SourceExpander.NotEmbeddingSource] +#endif [DebuggerDisplay("{" + nameof(Value) + "}", Name = "{" + nameof(Key) + ",nq}")] internal readonly struct DebugItem { @@ -270,6 +272,9 @@ public DebugItem(int l, int r, TValue value) public string Key => R - L == 1 ? $"[{L}]" : $"[{L}-{R})"; public TValue Value { get; } } +#if EMBEDDING + [SourceExpander.NotEmbeddingSource] +#endif private class DebugView { private readonly Segtree s; @@ -278,7 +283,6 @@ public DebugView(Segtree segtree) s = segtree; } [DebuggerBrowsable(DebuggerBrowsableState.RootHidden)] - [SourceExpander.NotEmbeddingSource] public DebugItem[] Items { get diff --git a/Source/ac-library-csharp/STL/PriorityQueue/PriorityQueueOp.cs b/Source/ac-library-csharp/STL/PriorityQueue/PriorityQueueOp.cs index 180f26e..bfbe24a 100644 --- a/Source/ac-library-csharp/STL/PriorityQueue/PriorityQueueOp.cs +++ b/Source/ac-library-csharp/STL/PriorityQueue/PriorityQueueOp.cs @@ -122,6 +122,10 @@ protected internal void UpdateDown(int i) [EditorBrowsable(Never)] public ReadOnlySpan Unorderd() => data.AsSpan(0, Count); + +#if EMBEDDING + [SourceExpander.NotEmbeddingSource] +#endif private class DebugView { private readonly PriorityQueueOp pq; diff --git a/Source/ac-library-csharp/STL/PriorityQueue/PriorityQueueOp`2.cs b/Source/ac-library-csharp/STL/PriorityQueue/PriorityQueueOp`2.cs index 00d2a73..12bf2c9 100644 --- a/Source/ac-library-csharp/STL/PriorityQueue/PriorityQueueOp`2.cs +++ b/Source/ac-library-csharp/STL/PriorityQueue/PriorityQueueOp`2.cs @@ -152,6 +152,10 @@ protected internal void UpdateDown(int i) public ReadOnlySpan UnorderdKeys() => keys.AsSpan(0, Count); [EditorBrowsable(Never)] public ReadOnlySpan UnorderdValues() => values.AsSpan(0, Count); + +#if EMBEDDING + [SourceExpander.NotEmbeddingSource] +#endif private class DebugView { private readonly PriorityQueueOp pq; diff --git a/Test/ac-library-csharp.Test/SourceExpanderTest.cs b/Test/ac-library-csharp.Test/SourceExpanderTest.cs index 5c4ec8e..ff2bc16 100644 --- a/Test/ac-library-csharp.Test/SourceExpanderTest.cs +++ b/Test/ac-library-csharp.Test/SourceExpanderTest.cs @@ -107,57 +107,32 @@ public async Task EmbeddedNamespaces() "AtCoder.Operators"); } - [EmbeddingFact] public async Task RemoveContract() { var embedded = await EmbeddedData.LoadFromAssembly(typeof(Segtree<,>)); - var codes = embedded.SourceFiles.Select(s => s.CodeBody); - codes.Should().NotContain(code => code.Contains("Contract.Assert")); + var code = string.Join(' ', embedded.SourceFiles.Select(s => s.CodeBody)); + code.Should().NotContain("Contract.Assert"); } [EmbeddingFact] - public async Task SegtreeDebugView() + public async Task RemoveDebugView() { var embedded = await EmbeddedData.LoadFromAssembly(typeof(Segtree<,>)); - var source = embedded.SourceFiles.Single(s => s.FileName.Split('\\', '/').Last() == "Segtree.cs"); - source.CodeBody.Should() - .EndWith("private class DebugView{private readonly Segtrees;public DebugView(Segtreesegtree){s=segtree;}}}}") - .And - .NotContain("DebugItem"); - } - - [EmbeddingFact] - public async Task LazySegtreeDebugView() - { - var embedded = await EmbeddedData.LoadFromAssembly(typeof(Segtree<,>)); - var source = embedded.SourceFiles.Single(s => s.FileName.Split('\\', '/').Last() == "LazySegtree.cs"); - source.CodeBody.Should() - .EndWith("private class DebugView{private readonly LazySegtrees;public DebugView(LazySegtreesegtree){s=segtree;}}}}") - .And - .NotContain("DebugItem"); + var code = string.Join(' ', embedded.SourceFiles.Select(s => s.CodeBody)); + code.Should().Contain("CollectionDebugView"); + code.Replace("CollectionDebugView", "CoDe").Should().NotContain("Debug"); } [EmbeddingGenericMathFact] - public async Task FenwickTreeGenericMathDebugView() + public async Task FenwickTreeGenericMath() { var embedded = await EmbeddedData.LoadFromAssembly(typeof(Segtree<,>)); var source = embedded.SourceFiles.Single(s => s.FileName.Split('\\', '/').Last() == "FenwickTree.GenericMath.cs"); source.CodeBody.Should() - .EndWith("private class DebugView{private readonly FenwickTreefw;public DebugView(FenwickTreefenwickTree){fw=fenwickTree;}}}}") - .And - .NotContain("DebugItem"); - } - - [EmbeddingFact] - public async Task FenwickTreeDebugView() - { - var embedded = await EmbeddedData.LoadFromAssembly(typeof(Segtree<,>)); - var source = embedded.SourceFiles.Single(s => s.FileName.Split('\\', '/').Last() == "FenwickTree.cs"); - source.CodeBody.Should() - .EndWith("private class DebugView{private readonly FenwickTreefw;public DebugView(FenwickTreefenwickTree){fw=fenwickTree;}}}}") + .Contain("FenwickTree") .And - .NotContain("DebugItem"); + .NotContain("Debug"); } #if DEBUG From f24f09f55ba46b6c33a2f1a47c3b4f72c78fd10b Mon Sep 17 00:00:00 2001 From: kzrnm Date: Wed, 25 Oct 2023 18:59:59 +0900 Subject: [PATCH 6/6] v3.3.0 --- CHANGELOG.md | 8 ++++++++ Directory.Build.props | 4 ++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8ce981d..775aa24 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,14 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [3.3.0] - 2023-10-25 +### Added +- Add `IModInt.Value` and `IModInt.Mod` +### Changed +- Move `IStaticMod` to IModInterface.cs +### Removed +- Remove DebugView from expanded code + ## [3.2.0] - 2023-09-25 ### Added - Add `Deque.Grow(int capacity)` diff --git a/Directory.Build.props b/Directory.Build.props index 9e7d998..1903c13 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -7,8 +7,8 @@ https://github.com/kzrnm/ac-library-csharp https://github.com/kzrnm/ac-library-csharp/blob/main/CHANGELOG.md - 3.2.0 - 3.2.0.101 + 3.3.0 + 3.3.0.101 $(GIT_COMMIT) True