File: test-format.c

package info (click to toggle)
goffice 0.10.57-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 28,136 kB
  • sloc: ansic: 114,820; sh: 4,993; makefile: 1,241; perl: 235; xml: 232
file content (139 lines) | stat: -rw-r--r-- 4,736 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
#include <goffice/goffice.h>
#include <string.h>

/* ------------------------------------------------------------------------- */

static void
test_general_format_1 (double val, int width, const char *expected)
{
	GString *str = g_string_new (NULL);

	go_render_general (NULL, str,
			   go_format_measure_strlen,
			   go_font_metrics_unit,
			   val, width,
			   FALSE, 0, 0);

	g_printerr ("go_render_general: %.17g %d -> \"%s\"\n",
		    val, width, str->str);

	if (expected && strcmp (str->str, expected) != 0) {
		g_printerr ("Expected \"%s\"\n", expected);
		g_assert (0);
	}

	g_string_free (str, TRUE);
}

static void
test_general_format (void)
{
	test_general_format_1 (nextafter (1.999999999, 2), 12, "1.999999999");
	test_general_format_1 (nextafter (1.999999999, 2), 11, "1.999999999");
	test_general_format_1 (nextafter (1.999999999, 2), 10, "2");
	test_general_format_1 (nextafter (1.999999999, 2),  9, "2");

	test_general_format_1 (1.999999999, 12, "1.999999999");
	test_general_format_1 (1.999999999, 11, "1.999999999");
	test_general_format_1 (1.999999999, 10, "2");
	test_general_format_1 (1.999999999,  9, "2");

	test_general_format_1 (999999999, 9, "999999999");
	test_general_format_1 (999999999, 8, "1E+09");
	test_general_format_1 (-999999999, 10, "-999999999");
	test_general_format_1 (-999999999, 9, "-1E+09");

	test_general_format_1 (0, 5, "0");
	test_general_format_1 (0, 3, "0");
	test_general_format_1 (0, 2, "0");
	test_general_format_1 (0, 1, "0");

	test_general_format_1 (9.25, 5, "9.25");
	test_general_format_1 (9.25, 3, "9.3");
	test_general_format_1 (9.25, 2, "9");
	test_general_format_1 (9.25, 1, "9");

	test_general_format_1 (9.5, 5, "9.5");
	test_general_format_1 (9.5, 3, "9.5");
	test_general_format_1 (9.5, 2, "10");
	test_general_format_1 (9.5, 1, NULL);

	test_general_format_1 (-9.5, 5, "-9.5");
	test_general_format_1 (-9.5, 4, "-9.5");
	test_general_format_1 (-9.5, 3, "-10");
	test_general_format_1 (-9.5, 2, NULL);

	test_general_format_1 (-9.25, 5, "-9.25");
	test_general_format_1 (-9.25, 4, "-9.3");
	test_general_format_1 (-9.25, 2, "-9");
	test_general_format_1 (-9.25, 1, NULL);

	test_general_format_1 (0.125, 10, "0.125");
	test_general_format_1 (0.125, 5, "0.125");
	test_general_format_1 (0.125, 4, "0.13");
	test_general_format_1 (0.125, 3, "0.1");
	test_general_format_1 (0.125, 3, "0.1");
	test_general_format_1 (0.125, 2, "0");
	test_general_format_1 (0.125, 1, "0");

	test_general_format_1 (-0.125, 6, "-0.125");
	test_general_format_1 (-0.125, 5, "-0.13");
	test_general_format_1 (-0.125, 4, "-0.1");
	test_general_format_1 (-0.125, 3, "-0");
	test_general_format_1 (-0.125, 2, "-0");
	test_general_format_1 (-0.125, 1, NULL);

	test_general_format_1 (1e-20, 25, "1E-20");
	test_general_format_1 (1e-20, 20, "1E-20");
	test_general_format_1 (1e-20, 15, "1E-20");
	test_general_format_1 (1e-20,  5, "1E-20");
	test_general_format_1 (1e-20,  4, "0");

	test_general_format_1 (1.0 / 3, 19, "0.3333333333333333");
	test_general_format_1 (1.0 / 3, 18, "0.3333333333333333");
	test_general_format_1 (1.0 / 3, 17, "0.333333333333333");
	test_general_format_1 (1.0 / 3, 10, "0.33333333");

	test_general_format_1 (0.12509999, 11, "0.12509999");
	test_general_format_1 (0.12509999, 10, "0.12509999");
	test_general_format_1 (0.12509999, 9, "0.1251");
	test_general_format_1 (0.12509999, 8, "0.1251");
	test_general_format_1 (0.12509999, 7, "0.1251");
	test_general_format_1 (0.12509999, 6, "0.1251");

	test_general_format_1 (0.12509999001, 13, "0.12509999001");
	test_general_format_1 (0.12509999001, 12, "0.12509999");
	test_general_format_1 (0.12509999001, 11, "0.12509999");
	test_general_format_1 (0.12509999001, 10, "0.12509999");
	test_general_format_1 (0.12509999001, 9, "0.1251");
	test_general_format_1 (0.12509999001, 8, "0.1251");
	test_general_format_1 (0.12509999001, 7, "0.1251");
	test_general_format_1 (0.12509999001, 6, "0.1251");

#if 0
	test_general_format_1 (6861116509411105.0, 20, "6.86111650941111E+15");
	test_general_format_1 (6861116509411105.0, 19, "6.8611165094111E+15");
	test_general_format_1 (6861116509411105.0, 18, "6.861116509411E+15");
	test_general_format_1 (6861116509411105.0, 17, "6.86111650941E+15");
	test_general_format_1 (6861116509411105.0, 16, "6.8611165094E+15");
	test_general_format_1 (6861116509411105.0, 15, "6.861116509E+15");
	test_general_format_1 (6861116509411105.0, 14, "6.86111651E+15");
#endif

	/* Only 15 digits needed.  Lots of terminating zeros.  */
	test_general_format_1 (75776.21, -1, "75776.21");
}

/* ------------------------------------------------------------------------- */

int
main (int argc, char **argv)
{
	libgoffice_init ();

	test_general_format ();

	libgoffice_shutdown ();

	return 0;
}