2 * Copyright © 2019 Ebrahim Byagowi
4 * This is part of HarfBuzz, a text shaping library.
6 * Permission is hereby granted, without written agreement and without
7 * license or royalty fees, to use, copy, modify, and distribute this
8 * software and its documentation for any purpose, provided that the
9 * above copyright notice and the following two paragraphs appear in
10 * all copies of this software.
12 * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
13 * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
14 * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
15 * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
18 * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
19 * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
20 * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
21 * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
22 * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
27 #include "hb-number.hh"
31 main (int argc, char **argv)
34 const char str[] = "123";
36 const char *end = str + 3;
39 assert (hb_parse_int (&pp, end, &pv));
41 assert (pp - str == 3);
42 assert (end - pp == 0);
47 const char str[] = "123";
49 const char *end = str + strlen (str);
52 assert (hb_parse_uint (&pp, end, &pv));
54 assert (pp - str == 3);
55 assert (end - pp == 0);
60 const char str[] = "12F";
62 const char *end = str + 3;
65 assert (hb_parse_uint (&pp, end, &pv, true, 16));
67 assert (pp - str == 3);
68 assert (end - pp == 0);
73 const char str[] = "12Fq";
75 const char *end = str + 4;
78 assert (!hb_parse_uint (&pp, end, &pv, true, 16));
79 assert (hb_parse_uint (&pp, end, &pv, false, 16));
81 assert (pp - str == 3);
82 assert (end - pp == 1);
87 const char str[] = "-123";
89 const char *end = str + 4;
92 assert (hb_parse_int (&pp, end, &pv));
94 assert (pp - str == 4);
95 assert (end - pp == 0);
100 const char str[] = "123";
101 const char *pp = str;
102 assert (ARRAY_LENGTH (str) == 4);
103 const char *end = str + ARRAY_LENGTH (str);
106 assert (hb_parse_uint (&pp, end, &pv));
108 assert (pp - str == 3);
109 assert (end - pp == 1);
113 const char str[] = "123\0";
114 const char *pp = str;
115 assert (ARRAY_LENGTH (str) == 5);
116 const char *end = str + ARRAY_LENGTH (str);
119 assert (hb_parse_uint (&pp, end, &pv));
121 assert (pp - str == 3);
122 assert (end - pp == 2);
126 const char str[] = "123V";
127 const char *pp = str;
128 assert (ARRAY_LENGTH (str) == 5);
129 const char *end = str + ARRAY_LENGTH (str);
132 assert (hb_parse_uint (&pp, end, &pv));
134 assert (pp - str == 3);
135 assert (end - pp == 2);
139 const char str[] = ".123";
140 const char *pp = str;
141 const char *end = str + ARRAY_LENGTH (str);
144 assert (hb_parse_double (&pp, end, &pv));
145 assert ((int) roundf (pv * 1000.) == 123);
146 assert (pp - str == 4);
147 assert (end - pp == 1);
151 const char str[] = "0.123";
152 const char *pp = str;
153 const char *end = str + ARRAY_LENGTH (str) - 1;
156 assert (hb_parse_double (&pp, end, &pv));
157 assert ((int) roundf (pv * 1000.) == 123);
158 assert (pp - str == 5);
159 assert (end - pp == 0);
163 const char str[] = "0.123e0";
164 const char *pp = str;
165 const char *end = str + ARRAY_LENGTH (str) - 1;
168 assert (hb_parse_double (&pp, end, &pv));
169 assert ((int) roundf (pv * 1000.) == 123);
170 assert (pp - str == 7);
171 assert (end - pp == 0);
175 const char str[] = "123e-3";
176 const char *pp = str;
177 const char *end = str + ARRAY_LENGTH (str) - 1;
180 assert (hb_parse_double (&pp, end, &pv));
181 assert ((int) roundf (pv * 1000.) == 123);
182 assert (pp - str == 6);
183 assert (end - pp == 0);
187 const char str[] = ".000123e+3";
188 const char *pp = str;
189 const char *end = str + ARRAY_LENGTH (str) - 1;
192 assert (hb_parse_double (&pp, end, &pv));
193 assert ((int) roundf (pv * 1000.) == 123);
194 assert (pp - str == 10);
195 assert (end - pp == 0);
199 const char str[] = "-.000000123e6";
200 const char *pp = str;
201 const char *end = str + ARRAY_LENGTH (str) - 1;
204 assert (hb_parse_double (&pp, end, &pv));
205 assert ((int) roundf (pv * 1000.) == -123);
206 assert (pp - str == 13);
207 assert (end - pp == 0);
212 const char str[] = "-1.23E-1";
213 const char *pp = str;
214 const char *end = str + ARRAY_LENGTH (str) - 1;
217 assert (hb_parse_double (&pp, end, &pv));
218 assert ((int) roundf (pv * 1000.) == -123);
219 assert (pp - str == 8);
220 assert (end - pp == 0);