নীচের কোডটি কোনও ক্রমে (যেমন bound1 <= bound2
, বা bound2 <= bound1
) নির্দিষ্টকরণের সীমাগুলি সমর্থন করে । লিনিয়ার সমীকরণগুলি ( y=mx+b
) যেখানে লাইনটির opeালু বৃদ্ধি বা হ্রাস হতে পারে সেগুলি থেকে গণনা করা মানগুলিতে ক্ল্যাম্পিংয়ের জন্য আমি এই দরকারীটি পেয়েছি ।
আমি জানি: কোডটিতে পাঁচটি অতি-কুরুচিপূর্ণ শর্তসাপেক্ষ এক্সপ্রেশন অপারেটর রয়েছে । জিনিসটি হ'ল এটি কাজ করে এবং নীচের পরীক্ষাগুলি এটি প্রমাণ করে। আপনি যদি চান তবে কঠোরভাবে অপ্রয়োজনীয় প্রথম বন্ধনী যুক্ত করুন।
আপনি অন্যান্য সংখ্যার ধরণের জন্য খুব সহজেই অন্যান্য ওভারলোডগুলি তৈরি করতে পারেন এবং মূলত পরীক্ষাগুলি অনুলিপি / আটকান।
সতর্কতা: ভাসমান পয়েন্ট সংখ্যাগুলির তুলনা করা সহজ নয়। এই কোডটি double
দৃ comp়তার সাথে তুলনা কার্যকর করে না । তুলনা অপারেটরগুলির ব্যবহারগুলি প্রতিস্থাপন করতে একটি ফ্লোটিং পয়েন্ট তুলনা লাইব্রেরি ব্যবহার করুন।
public static class MathExtensions
{
public static double Clamp(this double value, double bound1, double bound2)
{
return bound1 <= bound2 ? value <= bound1 ? bound1 : value >= bound2 ? bound2 : value : value <= bound2 ? bound2 : value >= bound1 ? bound1 : value;
}
}
xUnit / ফ্লুয়েন্টসেসরেশন পরীক্ষা:
public class MathExtensionsTests
{
[Theory]
[InlineData(0, 0, 0, 0)]
[InlineData(0, 0, 2, 0)]
[InlineData(-1, 0, 2, 0)]
[InlineData(1, 0, 2, 1)]
[InlineData(2, 0, 2, 2)]
[InlineData(3, 0, 2, 2)]
[InlineData(0, 2, 0, 0)]
[InlineData(-1, 2, 0, 0)]
[InlineData(1, 2, 0, 1)]
[InlineData(2, 2, 0, 2)]
[InlineData(3, 2, 0, 2)]
public void MustClamp(double value, double bound1, double bound2, double expectedValue)
{
value.Clamp(bound1, bound2).Should().Be(expectedValue);
}
}