<NME> Modulo.cs
<BEF> ADDFILE
<MSG> Added Math.Modulo task.
Added the TrucateResult boolean property to Math.Divide to support integer division.

git-svn-id: dcafdc6390f06cd4b2e634dc7bbf20f0ade3e1f6@183 299a232d-b705-0410-b782-f21f2f1e606a

<DFF> @@ -0,0 +1,87 @@
+// $Id$
+
+using System;
+using System.Text;
+
+namespace MSBuild.Community.Tasks.Math
+{
+    /// <summary>
+    /// Performs the modulo operation on numbers.
+    /// </summary>
+    /// <remarks>
+    /// The modulo operation finds the remainder of the division of one number by another.
+    /// <para>When the second number (modulus) is a fractional value, the result can be a fractional value.</para>
+    /// <para>
+    /// Equivalent to the % operator in C# or the Mod operator in Visual Basic.
+    /// </para>
+    /// </remarks>
+    /// <example>Numbers evenly divide:
+    /// <code><![CDATA[
+    /// <Math.Modulo Numbers="12;4">
+    ///     <Output TaskParameter="Result" PropertyName="Result" />
+    /// </Math.Modulo>
+    /// <Message Text="12 modulo 4 = $(Result)"/>
+    /// ]]></code>
+    /// Above example will display:
+    /// <code>12 modulo 4 = 0</code>
+    /// </example>
+    /// <example>Division on the numbers produces a remainder:
+    /// <code><![CDATA[
+    /// <Math.Modulo Numbers="14;4">
+    ///     <Output TaskParameter="Result" PropertyName="Result" />
+    /// </Math.Modulo>
+    /// <Message Text="14 modulo 4 = $(Result)"/>
+    /// ]]></code>
+    /// Above example will display:
+    /// <code>14 modulo 4 = 2</code>
+    /// </example>
+    /// <example>Modulus is a fractional value:
+    /// <code><![CDATA[
+    /// <Math.Modulo Numbers="12;3.5">
+    ///     <Output TaskParameter="Result" PropertyName="Result" />
+    /// </Math.Modulo>
+    /// <Message Text="12 modulo 3.5 = $(Result)"/>
+    /// ]]></code>
+    /// Above example will display:
+    /// <code>12 modulo 3.5 = 1.5</code>
+    /// </example>
+    public class Modulo : MathBase
+    {
+        /// <summary>
+        /// When overridden in a derived class, executes the task.
+        /// </summary>
+        /// <returns>
+        /// true if the task successfully executed; otherwise, false.
+        /// </returns>
+        public override bool Execute()
+        {
+            decimal[] numbers = StringArrayToDecimalArray(this.Numbers);
+            decimal? total = null;
+
+            StringBuilder logger = new StringBuilder();
+            logger.Append("Modulo numbers: ");
+
+            foreach (decimal number in numbers)
+            {
+                if (total.HasValue)
+                {
+                    logger.AppendFormat(" modulo {0}", number);
+                    total %= number;
+                }
+                else
+                {
+                    logger.Append(number);
+                    total = number;
+                }
+            }
+
+            decimal actualTotal = total ?? 0;
+
+            logger.AppendFormat(" = {0}", actualTotal);
+            base.Log.LogMessage(logger.ToString());
+
+            this.Result = actualTotal.ToString(this.NumericFormat ?? string.Empty);
+            return true;
+        }
+    }
+}

{'commit': 'diff --git a/Documentation/DevelopersGuide.txt b/Documentation/DevelopersGuide.txt\nindex 4861454..7285342 100644\n--- a/Documentation/DevelopersGuide.txt\n+++ b/Documentation/DevelopersGuide.txt\n@@ -126,7 +126,7 @@ Writing your own task\n       \n     - Recommended Tab width is 4.\n \n-5.  Four your NUnit tests, add a folder\n+5.  For your NUnit tests, add a folder\n     <msbuildtasks>\\Source\\MSBuild.Community.Task.Test\\<MyTask>\n     and place <MyTask>Test.cs, <MyTask>Test.proj and related files in there;\n     always add a folder, even if you want to add just one file.\n@@ -164,11 +164,6 @@ Writing your own task\n       in the source tree below\n       <msbuildtasks>\\Source\\\n       \n-    - See the notes in \n-      <msbuildtasks>\\MSBuild.Community.Tasks\\MSBuild.Community.Tasks.xsd\n-      on how to get IntelliSense support for the MSBuild community tasks\n-      when editing MSBuild project files.\n-      \n     - If your test depend on an optional service or tool,\n       it\'s good style to have the test skipped by default\n       and to provide an extra switch like "/p:withILMerge=true"\n@@ -194,10 +189,6 @@ Writing your own task\n     - Make an entry for your task in \n       <msbuildtasks>\\Documentation\\Overview.html\n       \n-    - Make an entry for your task in \n-      <msbuildtasks>\\MSBuild.Community.Tasks\\MSBuild.Community.Tasks.xsd\n-      to provide IntelliSense support in Visual Studio.\n-\n 11. Before commiting your task,\n     run "msbuild MSBuildTasks.proj /p:configuration=Release",\n     which treats warnings as errors.\ndiff --git a/Documentation/Overview.html b/Documentation/Overview.html\nindex 8c781ee..da3a808 100644\n--- a/Documentation/Overview.html\n+++ b/Documentation/Overview.html\n@@ -123,6 +123,12 @@ body, pre, code {\n             <td>\r\n                 Divide numbers.</td>\r\n         </tr>\r\n+        <tr>\r\n+            <td>\r\n+                Math.Modulo</td>\r\n+            <td>\r\n+                Performs the modulo operation on numbers.</td>\r\n+        </tr>\r\n         <tr>\r\n             <td>\r\n                 Math.Multiple</td>\r\ndiff --git a/Source/MSBuild.Community.Tasks.Tests/MSBuild.Community.Tasks.Tests.csproj b/Source/MSBuild.Community.Tasks.Tests/MSBuild.Community.Tasks.Tests.csproj\nindex fbeb925..aaa5b94 100644\n--- a/Source/MSBuild.Community.Tasks.Tests/MSBuild.Community.Tasks.Tests.csproj\n+++ b/Source/MSBuild.Community.Tasks.Tests/MSBuild.Community.Tasks.Tests.csproj\n@@ -47,6 +47,7 @@\n     <Compile Include="ILMerge\\ILMergeTest.cs" />\r\n     <Compile Include="Install\\InstallAssemblyTest.cs" />\r\n     <Compile Include="Install\\UninstallAssemblyTest.cs" />\r\n+    <Compile Include="Math\\ModuloTest.cs" />\r\n     <Compile Include="Properties\\AssemblyInfoCommon.cs" />\r\n     <Compile Include="FileUpdateTest.cs" />\r\n     <Compile Include="IIS\\AppPoolControllerTest.cs" />\r\ndiff --git a/Source/MSBuild.Community.Tasks.Tests/Math/DivideTest.cs b/Source/MSBuild.Community.Tasks.Tests/Math/DivideTest.cs\nindex 8b473da..b00df87 100644\n--- a/Source/MSBuild.Community.Tasks.Tests/Math/DivideTest.cs\n+++ b/Source/MSBuild.Community.Tasks.Tests/Math/DivideTest.cs\n@@ -38,5 +38,54 @@ public void DivideExecute()\n             Assert.AreEqual("0.5", task.Result);\n \n         }\n+\n+        [Test]\n+        public void TruncateResult_DoesNotProduceRemainder()\n+        {\n+            Divide task = new Divide();\n+            task.BuildEngine = new MockBuild();\n+            task.Numbers = new string[] { "12", "4" };\n+            task.TruncateResult = true;\n+            task.Execute();\n+\n+            Assert.AreEqual("3", task.Result);\n+        }\n+\n+        [Test]\n+        public void TruncateResult_ProducesRemainder()\n+        {\n+            Divide task = new Divide();\n+            task.BuildEngine = new MockBuild();\n+            task.Numbers = new string[] { "18", "4" };\n+            task.TruncateResult = true;\n+            task.Execute();\n+\n+            Assert.AreEqual("4", task.Result);\n+        }\n+\n+\n+        [Test]\n+        public void TruncateResult_NegativeOperandsProduceRemainder()\n+        {\n+            Divide task = new Divide();\n+            task.BuildEngine = new MockBuild();\n+            task.Numbers = new string[] { "-7", "3" };\n+            task.TruncateResult = true;\n+            task.Execute();\n+            \n+            Assert.AreEqual("-2", task.Result);\n+        }\n+\n+        [Test]\n+        public void TruncateResult_DecimalOperands()\n+        {\n+            Divide task = new Divide();\n+            task.BuildEngine = new MockBuild();\n+            task.Numbers = new string[] { "5.4", "1.3" };\n+            task.TruncateResult = true;\n+            task.Execute();\n+\n+            Assert.AreEqual("4", task.Result);\n+        }\n     }\n }\ndiff --git a/Source/MSBuild.Community.Tasks.Tests/Math/ModuloTest.cs b/Source/MSBuild.Community.Tasks.Tests/Math/ModuloTest.cs\nnew file mode 100644\nindex 0000000..739fe4e\n--- /dev/null\n+++ b/Source/MSBuild.Community.Tasks.Tests/Math/ModuloTest.cs\n@@ -0,0 +1,57 @@\n+// $Id$\r\n+\r\n+using System;\r\n+using NUnit.Framework;\r\n+using MSBuild.Community.Tasks.Math;\r\n+\r\n+namespace MSBuild.Community.Tasks.Tests.Math\r\n+{\r\n+    [TestFixture]\r\n+    public class ModuloTest\r\n+    {\r\n+        [Test]\r\n+        public void DivisionWithNoRemainder_ReturnsZero()\r\n+        {\r\n+            Modulo task = new Modulo();\r\n+            task.BuildEngine = new MockBuild();\r\n+            task.Numbers = new string[] { "12", "4" };\r\n+            task.Execute();\r\n+\r\n+            Assert.AreEqual("0", task.Result);\r\n+        }\r\n+\r\n+        [Test]\r\n+        public void DivisionWithRemainder_ReturnsRemainder()\r\n+        {\r\n+            Modulo task = new Modulo();\r\n+            task.BuildEngine = new MockBuild();\r\n+            task.Numbers = new string[] { "14", "4" };\r\n+            task.Execute();\r\n+\r\n+            Assert.AreEqual("2", task.Result);\r\n+        }\r\n+\r\n+        [Test]\r\n+        public void ModulusFractionalNumber_ReturnsFractionalNumber()\r\n+        {\r\n+            Modulo task = new Modulo();\r\n+            task.BuildEngine = new MockBuild();\r\n+            task.Numbers = new string[] { "12", "3.5" };\r\n+            task.Execute();\r\n+\r\n+            Assert.AreEqual("1.5", task.Result);\r\n+        }\r\n+\r\n+        [Test]\r\n+        public void MultipleNumbers_EvaluatesLeftToRight()\r\n+        {\r\n+            Modulo task = new Modulo();\r\n+            task.BuildEngine = new MockBuild();\r\n+            task.Numbers = new string[] { "27", "10", "3" };\r\n+            task.Execute();\r\n+\r\n+            Assert.AreEqual("1", task.Result);\r\n+        }\r\n+\r\n+    }\r\n+}\r\ndiff --git a/Source/MSBuild.Community.Tasks/MSBuild.Community.Tasks.Targets b/Source/MSBuild.Community.Tasks/MSBuild.Community.Tasks.Targets\nindex 310d468..eeb66af 100644\n--- a/Source/MSBuild.Community.Tasks/MSBuild.Community.Tasks.Targets\n+++ b/Source/MSBuild.Community.Tasks/MSBuild.Community.Tasks.Targets\n@@ -20,6 +20,7 @@\n \n   <UsingTask AssemblyFile="$(MSBuildCommunityTasksLib)" TaskName="MSBuild.Community.Tasks.Math.Add" />\n   <UsingTask AssemblyFile="$(MSBuildCommunityTasksLib)" TaskName="MSBuild.Community.Tasks.Math.Divide" />\n+  <UsingTask AssemblyFile="$(MSBuildCommunityTasksLib)" TaskName="MSBuild.Community.Tasks.Math.Modulo" />\n   <UsingTask AssemblyFile="$(MSBuildCommunityTasksLib)" TaskName="MSBuild.Community.Tasks.Math.Multiple" />\n   <UsingTask AssemblyFile="$(MSBuildCommunityTasksLib)" TaskName="MSBuild.Community.Tasks.Math.Subtract" />\n \ndiff --git a/Source/MSBuild.Community.Tasks/MSBuild.Community.Tasks.csproj b/Source/MSBuild.Community.Tasks/MSBuild.Community.Tasks.csproj\nindex aa69d05..ddfad23 100644\n--- a/Source/MSBuild.Community.Tasks/MSBuild.Community.Tasks.csproj\n+++ b/Source/MSBuild.Community.Tasks/MSBuild.Community.Tasks.csproj\n@@ -62,6 +62,7 @@\n     <Compile Include="ILMerge\\ILMerge.cs" />\r\n     <Compile Include="Install\\InstallAssembly.cs" />\r\n     <Compile Include="Install\\UninstallAssembly.cs" />\r\n+    <Compile Include="Math\\Modulo.cs" />\r\n     <Compile Include="Properties\\AssemblyInfo.cs" />\r\n     <Compile Include="Regex\\RegexBase.cs" />\r\n     <Compile Include="Regex\\RegexMatch.cs" />\r\ndiff --git a/Source/MSBuild.Community.Tasks/Math/Divide.cs b/Source/MSBuild.Community.Tasks/Math/Divide.cs\nindex 208446c..c1b93c5 100644\n--- a/Source/MSBuild.Community.Tasks/Math/Divide.cs\n+++ b/Source/MSBuild.Community.Tasks/Math/Divide.cs\n@@ -45,9 +45,39 @@ namespace MSBuild.Community.Tasks.Math\n     /// </Math.Divide>\n     /// <Message Text="Divide 1/2= $(Result)"/>\n     /// ]]></code>\n+    /// Above example will display:\n+    /// <code>Divide 1/2= 0.5</code>\n+    /// </example>\n+    /// <example>Truncate the result to always return an integer:\n+    /// <code><![CDATA[\n+    /// <Math.Divide Numbers="7;3" TruncateResult="true">\n+    ///     <Output TaskParameter="Result" PropertyName="Result" />\n+    /// </Math.Divide>\n+    /// <Message Text="Divide 7/3= $(Result)"/>\n+    /// ]]></code>\n+    /// Above example will display:\n+    /// <code>Divide 7/3= 2</code>\n     /// </example>\n     public class Divide : MathBase\n     {\n+        private bool truncateResult;\n+\n+        /// <summary>\n+        /// When <see langword="true"/>, uses integer division to truncate the result. Default is <see langword="false" />\n+        /// </summary>\n+        /// <remarks>\n+        /// Any remainder in the result is dropped, and the closest integer to zero is returned.\n+        /// <para>\n+        /// Refer to the documentation for the <see href="http://msdn2.microsoft.com/library/0e16fywh.aspx">\\ Operator</see>\n+        /// for more information about integer division.\n+        /// </para>\n+        /// </remarks>\n+        public bool TruncateResult\n+        {\n+            get { return truncateResult; }\n+            set { truncateResult = value; }\n+        }\n+\n \n         /// <summary>\n         /// When overridden in a derived class, executes the task.\n@@ -78,7 +108,11 @@ public override bool Execute()\n             }\n \n             decimal actualTotal = total ?? 0;\n-\n+            if (truncateResult)\n+            {\n+                actualTotal = (int)actualTotal;\n+                logger.Append(" [truncated]");\n+            }\n             logger.AppendFormat(" = {0}", actualTotal);\n             base.Log.LogMessage(logger.ToString());\n \ndiff --git a/Source/MSBuild.Community.Tasks/Math/Modulo.cs b/Source/MSBuild.Community.Tasks/Math/Modulo.cs\nnew file mode 100644\nindex 0000000..900ca3e\n--- /dev/null\n+++ b/Source/MSBuild.Community.Tasks/Math/Modulo.cs\n@@ -0,0 +1,87 @@\n+// $Id$\r\n+\r\n+using System;\r\n+using System.Text;\r\n+\r\n+namespace MSBuild.Community.Tasks.Math\r\n+{\r\n+    /// <summary>\r\n+    /// Performs the modulo operation on numbers.\r\n+    /// </summary>\r\n+    /// <remarks>\r\n+    /// The modulo operation finds the remainder of the division of one number by another.\r\n+    /// <para>When the second number (modulus) is a fractional value, the result can be a fractional value.</para>\r\n+    /// <para>\r\n+    /// Equivalent to the % operator in C# or the Mod operator in Visual Basic.\r\n+    /// </para>\r\n+    /// </remarks>\r\n+    /// <example>Numbers evenly divide:\r\n+    /// <code><![CDATA[\r\n+    /// <Math.Modulo Numbers="12;4">\r\n+    ///     <Output TaskParameter="Result" PropertyName="Result" />\r\n+    /// </Math.Modulo>\r\n+    /// <Message Text="12 modulo 4 = $(Result)"/>\r\n+    /// ]]></code>\r\n+    /// Above example will display:\r\n+    /// <code>12 modulo 4 = 0</code>\r\n+    /// </example>\r\n+    /// <example>Division on the numbers produces a remainder:\r\n+    /// <code><![CDATA[\r\n+    /// <Math.Modulo Numbers="14;4">\r\n+    ///     <Output TaskParameter="Result" PropertyName="Result" />\r\n+    /// </Math.Modulo>\r\n+    /// <Message Text="14 modulo 4 = $(Result)"/>\r\n+    /// ]]></code>\r\n+    /// Above example will display:\r\n+    /// <code>14 modulo 4 = 2</code>\r\n+    /// </example>\r\n+    /// <example>Modulus is a fractional value:\r\n+    /// <code><![CDATA[\r\n+    /// <Math.Modulo Numbers="12;3.5">\r\n+    ///     <Output TaskParameter="Result" PropertyName="Result" />\r\n+    /// </Math.Modulo>\r\n+    /// <Message Text="12 modulo 3.5 = $(Result)"/>\r\n+    /// ]]></code>\r\n+    /// Above example will display:\r\n+    /// <code>12 modulo 3.5 = 1.5</code>\r\n+    /// </example>\r\n+    public class Modulo : MathBase\r\n+    {\r\n+        /// <summary>\r\n+        /// When overridden in a derived class, executes the task.\r\n+        /// </summary>\r\n+        /// <returns>\r\n+        /// true if the task successfully executed; otherwise, false.\r\n+        /// </returns>\r\n+        public override bool Execute()\r\n+        {\r\n+            decimal[] numbers = StringArrayToDecimalArray(this.Numbers);\r\n+            decimal? total = null;\r\n+\r\n+            StringBuilder logger = new StringBuilder();\r\n+            logger.Append("Modulo numbers: ");\r\n+\r\n+            foreach (decimal number in numbers)\r\n+            {\r\n+                if (total.HasValue)\r\n+                {\r\n+                    logger.AppendFormat(" modulo {0}", number);\r\n+                    total %= number;\r\n+                }\r\n+                else\r\n+                {\r\n+                    logger.Append(number);\r\n+                    total = number;\r\n+                }\r\n+            }\r\n+\r\n+            decimal actualTotal = total ?? 0;\r\n+\r\n+            logger.AppendFormat(" = {0}", actualTotal);\r\n+            base.Log.LogMessage(logger.ToString());\r\n+\r\n+            this.Result = actualTotal.ToString(this.NumericFormat ?? string.Empty);\r\n+            return true;\r\n+        }\r\n+    }\r\n+}\r\ndiff --git a/Test.proj b/Test.proj\nindex 21c3ad8..a8be633 100644\n--- a/Test.proj\n+++ b/Test.proj\n@@ -106,6 +106,16 @@\n \t\t</Math.Divide>\r\n \t\t<Message Text="Divide 1/2= $(Result)"/>\r\n \r\n+\t\t<Math.Divide Numbers="7;3" TruncateResult="true">\r\n+\t\t\t<Output TaskParameter="Result" PropertyName="Result" />\r\n+\t\t</Math.Divide>\r\n+\t\t<Message Text="Divide 7/3= $(Result)"/>\r\n+\r\n+\t\t<Math.Modulo Numbers="7;3">\r\n+\t\t\t<Output TaskParameter="Result" PropertyName="Result" />\r\n+\t\t</Math.Modulo>\r\n+\t\t<Message Text="Modulo 7/3= $(Result)"/>\r\n+\r\n \t</Target>\r\n \r\n \t<Target Name="Version">\r\n', 'commit_subject': 'Added Math.Modulo task. Added the TrucateResult boolean property to Math.Divide to support integer division.', 'repo_name': 'loresoft/msbuildtasks', 'committer': {'name': 'joshuaflanagan', 'email': '7b32c54d477aa4f33ab84016935ea8b221bba4a2@299a232d-b705-0410-b782-f21f2f1e606a', 'time_sec': '1149475249', 'tz_offset': '0', 'date': {'seconds': '1149475249'}}, 'commit_tree': '249ebb260678ad557d54cf33f6c1b41d83f4ced7', 'commit_message': 'Added Math.Modulo task.\nAdded the TrucateResult boolean property to Math.Divide to support integer division.\n\ngit-svn-id: dcafdc6390f06cd4b2e634dc7bbf20f0ade3e1f6@183 299a232d-b705-0410-b782-f21f2f1e606a\n', 'language_name': 'C#', 'license': 'bsd-2-clause', 'hunks': '@@ -0,0 +1,87 @@\n+// $Id$\r\n+\r\n+using System;\r\n+using System.Text;\r\n+\r\n+namespace MSBuild.Community.Tasks.Math\r\n+{\r\n+    /// <summary>\r\n+    /// Performs the modulo operation on numbers.\r\n+    /// </summary>\r\n+    /// <remarks>\r\n+    /// The modulo operation finds the remainder of the division of one number by another.\r\n+    /// <para>When the second number (modulus) is a fractional value, the result can be a fractional value.</para>\r\n+    /// <para>\r\n+    /// Equivalent to the % operator in C# or the Mod operator in Visual Basic.\r\n+    /// </para>\r\n+    /// </remarks>\r\n+    /// <example>Numbers evenly divide:\r\n+    /// <code><![CDATA[\r\n+    /// <Math.Modulo Numbers="12;4">\r\n+    ///     <Output TaskParameter="Result" PropertyName="Result" />\r\n+    /// </Math.Modulo>\r\n+    /// <Message Text="12 modulo 4 = $(Result)"/>\r\n+    /// ]]></code>\r\n+    /// Above example will display:\r\n+    /// <code>12 modulo 4 = 0</code>\r\n+    /// </example>\r\n+    /// <example>Division on the numbers produces a remainder:\r\n+    /// <code><![CDATA[\r\n+    /// <Math.Modulo Numbers="14;4">\r\n+    ///     <Output TaskParameter="Result" PropertyName="Result" />\r\n+    /// </Math.Modulo>\r\n+    /// <Message Text="14 modulo 4 = $(Result)"/>\r\n+    /// ]]></code>\r\n+    /// Above example will display:\r\n+    /// <code>14 modulo 4 = 2</code>\r\n+    /// </example>\r\n+    /// <example>Modulus is a fractional value:\r\n+    /// <code><![CDATA[\r\n+    /// <Math.Modulo Numbers="12;3.5">\r\n+    ///     <Output TaskParameter="Result" PropertyName="Result" />\r\n+    /// </Math.Modulo>\r\n+    /// <Message Text="12 modulo 3.5 = $(Result)"/>\r\n+    /// ]]></code>\r\n+    /// Above example will display:\r\n+    /// <code>12 modulo 3.5 = 1.5</code>\r\n+    /// </example>\r\n+    public class Modulo : MathBase\r\n+    {\r\n+        /// <summary>\r\n+        /// When overridden in a derived class, executes the task.\r\n+        /// </summary>\r\n+        /// <returns>\r\n+        /// true if the task successfully executed; otherwise, false.\r\n+        /// </returns>\r\n+        public override bool Execute()\r\n+        {\r\n+            decimal[] numbers = StringArrayToDecimalArray(this.Numbers);\r\n+            decimal? total = null;\r\n+\r\n+            StringBuilder logger = new StringBuilder();\r\n+            logger.Append("Modulo numbers: ");\r\n+\r\n+            foreach (decimal number in numbers)\r\n+            {\r\n+                if (total.HasValue)\r\n+                {\r\n+                    logger.AppendFormat(" modulo {0}", number);\r\n+                    total %= number;\r\n+                }\r\n+                else\r\n+                {\r\n+                    logger.Append(number);\r\n+                    total = number;\r\n+                }\r\n+            }\r\n+\r\n+            decimal actualTotal = total ?? 0;\r\n+\r\n+            logger.AppendFormat(" = {0}", actualTotal);\r\n+            base.Log.LogMessage(logger.ToString());\r\n+\r\n+            this.Result = actualTotal.ToString(this.NumericFormat ?? string.Empty);\r\n+            return true;\r\n+        }\r\n+    }\r\n+}\r\n', 'addition_count': 87, 'deletion_count': 0, 'src_file': '/dev/null', 'tgt_file': 'b/Source/MSBuild.Community.Tasks/Math/Modulo.cs', 'file_extension': '.cs', 'before_file': 'ADDFILE', 'message': 'Added Math.Modulo task.\nAdded the TrucateResult boolean property to Math.Divide to support integer division.\n\ngit-svn-id: dcafdc6390f06cd4b2e634dc7bbf20f0ade3e1f6@183 299a232d-b705-0410-b782-f21f2f1e606a\n', 'author_name': 'joshuaflanagan', 'lang': 'Community'}