TestStdLibExtras.cpp 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. /*
  2. * Copyright (c) 2021, Tim Flynn <trflynn89@serenityos.org>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #include <LibTest/TestSuite.h>
  7. #include <AK/Optional.h>
  8. #include <AK/StdLibExtras.h>
  9. #include <AK/StringView.h>
  10. #include <AK/Variant.h>
  11. #include <AK/Vector.h>
  12. TEST_CASE(mix)
  13. {
  14. double a = 1.0;
  15. double b = 3.0;
  16. EXPECT_APPROXIMATE(mix(a, b, 0.0), 1.0);
  17. EXPECT_APPROXIMATE(mix(a, b, 0.5), 2.0);
  18. EXPECT_APPROXIMATE(mix(a, b, 1.0), 3.0);
  19. EXPECT_APPROXIMATE(mix(b, a, 0.0), 3.0);
  20. EXPECT_APPROXIMATE(mix(b, a, 0.5), 2.0);
  21. EXPECT_APPROXIMATE(mix(b, a, 1.0), 1.0);
  22. }
  23. TEST_CASE(swap)
  24. {
  25. int i = 4;
  26. int j = 6;
  27. swap(i, j);
  28. EXPECT_EQ(i, 6);
  29. EXPECT_EQ(j, 4);
  30. }
  31. TEST_CASE(swap_same_value)
  32. {
  33. int i = 4;
  34. swap(i, i);
  35. EXPECT_EQ(i, 4);
  36. }
  37. TEST_CASE(swap_same_complex_object)
  38. {
  39. struct Type1 {
  40. StringView foo;
  41. };
  42. struct Type2 {
  43. Optional<Type1> foo;
  44. Vector<Type1> bar;
  45. };
  46. Variant<Type1, Type2> value1 { Type1 { "hello"sv } };
  47. Variant<Type1, Type2> value2 { Type2 { {}, { { "goodbye"sv } } } };
  48. swap(value1, value2);
  49. EXPECT(value1.has<Type2>());
  50. EXPECT(value2.has<Type1>());
  51. swap(value1, value1);
  52. EXPECT(value1.has<Type2>());
  53. EXPECT(value2.has<Type1>());
  54. }