fixed-test.c 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. /*
  2. * Copyright © 2012 Intel Corporation
  3. *
  4. * Permission is hereby granted, free of charge, to any person obtaining
  5. * a copy of this software and associated documentation files (the
  6. * "Software"), to deal in the Software without restriction, including
  7. * without limitation the rights to use, copy, modify, merge, publish,
  8. * distribute, sublicense, and/or sell copies of the Software, and to
  9. * permit persons to whom the Software is furnished to do so, subject to
  10. * the following conditions:
  11. *
  12. * The above copyright notice and this permission notice (including the
  13. * next paragraph) shall be included in all copies or substantial
  14. * portions of the Software.
  15. *
  16. * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  17. * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  18. * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
  19. * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
  20. * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
  21. * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
  22. * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  23. * SOFTWARE.
  24. */
  25. #define _GNU_SOURCE
  26. #include <stdlib.h>
  27. #include <stdio.h>
  28. #include <assert.h>
  29. #include "wayland-private.h"
  30. #include "test-runner.h"
  31. TEST(fixed_double_conversions)
  32. {
  33. wl_fixed_t f;
  34. double d;
  35. d = 62.125;
  36. f = wl_fixed_from_double(d);
  37. fprintf(stderr, "double %lf to fixed %x\n", d, f);
  38. assert(f == 0x3e20);
  39. d = -1200.625;
  40. f = wl_fixed_from_double(d);
  41. fprintf(stderr, "double %lf to fixed %x\n", d, f);
  42. assert(f == -0x4b0a0);
  43. f = random();
  44. d = wl_fixed_to_double(f);
  45. fprintf(stderr, "fixed %x to double %lf\n", f, d);
  46. assert(d == f / 256.0);
  47. f = 0x012030;
  48. d = wl_fixed_to_double(f);
  49. fprintf(stderr, "fixed %x to double %lf\n", f, d);
  50. assert(d == 288.1875);
  51. f = 0x70000000;
  52. d = wl_fixed_to_double(f);
  53. fprintf(stderr, "fixed %x to double %lf\n", f, d);
  54. assert(d == f / 256);
  55. f = -0x012030;
  56. d = wl_fixed_to_double(f);
  57. fprintf(stderr, "fixed %x to double %lf\n", f, d);
  58. assert(d == -288.1875);
  59. f = 0x80000000;
  60. d = wl_fixed_to_double(f);
  61. fprintf(stderr, "fixed %x to double %lf\n", f, d);
  62. assert(d == f / 256);
  63. }
  64. TEST(fixed_int_conversions)
  65. {
  66. wl_fixed_t f;
  67. int i;
  68. i = 62;
  69. f = wl_fixed_from_int(i);
  70. assert(f == 62 * 256);
  71. i = -2080;
  72. f = wl_fixed_from_int(i);
  73. assert(f == -2080 * 256);
  74. f = 0x277013;
  75. i = wl_fixed_to_int(f);
  76. assert(i == 0x2770);
  77. f = -0x5044;
  78. i = wl_fixed_to_int(f);
  79. assert(i == -0x50);
  80. }