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 26 #include <stdlib.h> 27 #include <stdio.h> 28 #include <assert.h> 29 #include "wayland-private.h" 30 #include "test-runner.h" 31 32 TEST(fixed_double_conversions) 33 { 34 wl_fixed_t f; 35 double d; 36 37 d = 62.125; 38 f = wl_fixed_from_double(d); 39 fprintf(stderr, "double %lf to fixed %x\n", d, f); 40 assert(f == 0x3e20); 41 42 d = -1200.625; 43 f = wl_fixed_from_double(d); 44 fprintf(stderr, "double %lf to fixed %x\n", d, f); 45 assert(f == -0x4b0a0); 46 47 f = random(); 48 d = wl_fixed_to_double(f); 49 fprintf(stderr, "fixed %x to double %lf\n", f, d); 50 assert(d == f / 256.0); 51 52 f = 0x012030; 53 d = wl_fixed_to_double(f); 54 fprintf(stderr, "fixed %x to double %lf\n", f, d); 55 assert(d == 288.1875); 56 57 f = 0x70000000; 58 d = wl_fixed_to_double(f); 59 fprintf(stderr, "fixed %x to double %lf\n", f, d); 60 assert(d == f / 256); 61 62 f = -0x012030; 63 d = wl_fixed_to_double(f); 64 fprintf(stderr, "fixed %x to double %lf\n", f, d); 65 assert(d == -288.1875); 66 67 f = 0x80000000; 68 d = wl_fixed_to_double(f); 69 fprintf(stderr, "fixed %x to double %lf\n", f, d); 70 assert(d == f / 256); 71 } 72 73 TEST(fixed_int_conversions) 74 { 75 wl_fixed_t f; 76 int i; 77 78 i = 62; 79 f = wl_fixed_from_int(i); 80 assert(f == 62 * 256); 81 82 i = -2080; 83 f = wl_fixed_from_int(i); 84 assert(f == -2080 * 256); 85 86 f = 0x277013; 87 i = wl_fixed_to_int(f); 88 assert(i == 0x2770); 89 90 f = -0x5044; 91 i = wl_fixed_to_int(f); 92 assert(i == -0x50); 93 } 94