TestCSSPixels.cpp 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. /*
  2. * Copyright (c) 2023, Aliaksandr Kalenik <kalenik.aliaksandr@gmail.com>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #include <LibTest/TestCase.h>
  7. #include <LibWeb/PixelUnits.h>
  8. namespace Web {
  9. TEST_CASE(addition1)
  10. {
  11. CSSPixels a(10);
  12. CSSPixels b(20);
  13. CSSPixels c = a + b;
  14. EXPECT_EQ(c, CSSPixels(30));
  15. }
  16. TEST_CASE(subtraction1)
  17. {
  18. CSSPixels a(30);
  19. CSSPixels b(10);
  20. CSSPixels c = a - b;
  21. EXPECT_EQ(c, CSSPixels(20));
  22. }
  23. TEST_CASE(division1)
  24. {
  25. CSSPixels a(10);
  26. CSSPixels b(5);
  27. CSSPixels c = a / b;
  28. EXPECT_EQ(c, CSSPixels(2));
  29. a = CSSPixels::from_raw(0x3FFF'FFFF); // int_max / 2
  30. b = 0.25;
  31. EXPECT(!a.might_be_saturated());
  32. EXPECT((a / b).might_be_saturated());
  33. }
  34. TEST_CASE(multiplication1)
  35. {
  36. CSSPixels a(3);
  37. CSSPixels b(4);
  38. CSSPixels c = a * b;
  39. EXPECT_EQ(c, CSSPixels(12));
  40. // Temporary overflow
  41. a = CSSPixels::from_raw(0xFFFF'FFFF >> (CSSPixels::fractional_bits + 1));
  42. b = 1;
  43. EXPECT_EQ((a * b), a);
  44. // Rounding
  45. a = CSSPixels::from_raw(0b01'000001);
  46. b = CSSPixels::from_raw(0b01'100000);
  47. EXPECT_EQ(a * b, CSSPixels(a.to_double() * b.to_double()));
  48. EXPECT_EQ(a * -b, CSSPixels(a.to_double() * -b.to_double()));
  49. }
  50. TEST_CASE(addition2)
  51. {
  52. CSSPixels a(3);
  53. a += CSSPixels(2);
  54. EXPECT_EQ(a, CSSPixels(5));
  55. }
  56. TEST_CASE(to_double)
  57. {
  58. CSSPixels a(10);
  59. EXPECT_EQ(a.to_double(), 10);
  60. }
  61. TEST_CASE(to_float)
  62. {
  63. CSSPixels a(11);
  64. EXPECT_EQ(a.to_float(), 11);
  65. }
  66. TEST_CASE(to_int)
  67. {
  68. CSSPixels b(12);
  69. EXPECT_EQ(b.to_int(), 12);
  70. }
  71. TEST_CASE(comparison1)
  72. {
  73. EXPECT_EQ(CSSPixels(1) < CSSPixels(2), true);
  74. }
  75. TEST_CASE(comparison2)
  76. {
  77. EXPECT_EQ(CSSPixels(123) == CSSPixels(123), true);
  78. }
  79. TEST_CASE(saturated_addition)
  80. {
  81. EXPECT_EQ(CSSPixels(INFINITY), CSSPixels(INFINITY) + 1);
  82. }
  83. TEST_CASE(saturated_subtraction)
  84. {
  85. auto value = CSSPixels(INFINITY);
  86. EXPECT_EQ(value - -1, CSSPixels(INFINITY));
  87. }
  88. TEST_CASE(multiplication_uses_i64_for_raw_values)
  89. {
  90. CSSPixels a(1200);
  91. CSSPixels b(647);
  92. CSSPixels c = a * b;
  93. EXPECT_EQ(c, CSSPixels(776400));
  94. }
  95. TEST_CASE(rounding)
  96. {
  97. EXPECT_EQ(ceil(CSSPixels(0)), CSSPixels(0));
  98. EXPECT_EQ(ceil(CSSPixels(0.5)), CSSPixels(1));
  99. EXPECT_EQ(ceil(CSSPixels(1.3)), CSSPixels(2));
  100. EXPECT_EQ(ceil(CSSPixels(1.5)), CSSPixels(2));
  101. EXPECT_EQ(ceil(CSSPixels(1.7)), CSSPixels(2));
  102. EXPECT_EQ(ceil(CSSPixels(-0.5)), CSSPixels(0));
  103. EXPECT_EQ(ceil(CSSPixels(-1.3)), CSSPixels(-1));
  104. EXPECT_EQ(ceil(CSSPixels(-1.5)), CSSPixels(-1));
  105. EXPECT_EQ(ceil(CSSPixels(-1.7)), CSSPixels(-1));
  106. EXPECT_EQ(floor(CSSPixels(0)), CSSPixels(0));
  107. EXPECT_EQ(floor(CSSPixels(0.5)), CSSPixels(0));
  108. EXPECT_EQ(floor(CSSPixels(1.3)), CSSPixels(1));
  109. EXPECT_EQ(floor(CSSPixels(1.5)), CSSPixels(1));
  110. EXPECT_EQ(floor(CSSPixels(1.7)), CSSPixels(1));
  111. EXPECT_EQ(floor(CSSPixels(-0.5)), CSSPixels(-1));
  112. EXPECT_EQ(floor(CSSPixels(-1.3)), CSSPixels(-2));
  113. EXPECT_EQ(floor(CSSPixels(-1.5)), CSSPixels(-2));
  114. EXPECT_EQ(floor(CSSPixels(-1.7)), CSSPixels(-2));
  115. EXPECT_EQ(round(CSSPixels(0)), CSSPixels(0));
  116. EXPECT_EQ(round(CSSPixels(0.5)), CSSPixels(1));
  117. EXPECT_EQ(round(CSSPixels(1.3)), CSSPixels(1));
  118. EXPECT_EQ(round(CSSPixels(1.5)), CSSPixels(2));
  119. EXPECT_EQ(round(CSSPixels(1.7)), CSSPixels(2));
  120. EXPECT_EQ(round(CSSPixels(-0.5)), CSSPixels(-1));
  121. EXPECT_EQ(round(CSSPixels(-1.3)), CSSPixels(-1));
  122. EXPECT_EQ(round(CSSPixels(-1.5)), CSSPixels(-2));
  123. EXPECT_EQ(round(CSSPixels(-1.7)), CSSPixels(-2));
  124. }
  125. }