1 /*
2  * Copyright © 2012 Intel Corporation
3  *
4  * Permission is hereby granted, free of charge, to any person obtaining a
5  * copy of this software and associated documentation files (the "Software"),
6  * to deal in the Software without restriction, including without limitation
7  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8  * and/or sell copies of the Software, and to permit persons to whom the
9  * Software is furnished to do so, subject to the following conditions:
10  *
11  * The above copyright notice and this permission notice (including the next
12  * paragraph) shall be included in all copies or substantial portions of the
13  * Software.
14  *
15  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
18  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21  * DEALINGS IN THE SOFTWARE.
22  */
23 
24 #include <gtest/gtest.h>
25 #include <GL/gl.h>
26 
27 #include "main/enums.h"
28 
29 struct enum_info {
30    int value;
31    const char *name;
32 };
33 
34 extern const struct enum_info everything[];
35 
TEST(EnumStrings,LookUpByNumber)36 TEST(EnumStrings, LookUpByNumber)
37 {
38    for (unsigned i = 0; everything[i].name != NULL; i++) {
39       EXPECT_STREQ(everything[i].name,
40 		   _mesa_enum_to_string(everything[i].value));
41    }
42 }
43 
TEST(EnumStrings,LookUpUnknownNumber)44 TEST(EnumStrings, LookUpUnknownNumber)
45 {
46    EXPECT_STRCASEEQ("0xEEEE", _mesa_enum_to_string(0xEEEE));
47 }
48 
49 const struct enum_info everything[] = {
50    /* A core enum, that should take precedence over _EXT and _OES. */
51    { 0x0007, "GL_QUADS" },
52 
53    /* A core enum, that should take precedence over _EXT, _ARB, and _OES. */
54    { 0x000a, "GL_LINES_ADJACENCY" },
55 
56    /* A core enum, that should take precedence over a _BIT. */
57    { 0x0100, "GL_ACCUM" },
58 
59    /* An enum with "_BIT" that shouldn't get stripped out when we drop most
60     * "*_BIT" enums.
61     */
62    { 0x0d55, "GL_ALPHA_BITS" },
63 
64    /* An EXT-only extension that we never expect to see show up in ARB/core.
65     */
66    { 0x8062, "GL_REPLACE_EXT" },
67 
68    /* An extension that made it from vendor to _EXT, but we never expect to
69     * see go farther.
70     */
71    { 0x80a1, "GL_1PASS_EXT" },
72 
73    /* A vendor-only extension that we never expect to see show up in
74     * EXT/ARB/core.
75     */
76    { 0x8503, "GL_COMBINE4_NV" },
77 
78    /* An extension that got promoted from _EXT to _ARB, but we don't expect to
79     * see go any further.
80     */
81    { 0x850a, "GL_MODELVIEW1_ARB" },
82 
83    /* An EXT-only enum that should take precedence over a _BIT. */
84    { 0x8000, "GL_ABGR_EXT" },
85 
86    /* An unusually-large enum */
87    { 0x19262, "GL_RASTER_POSITION_UNCLIPPED_IBM" },
88 
89    /* Bitfields like GL_SCISSOR_BIT and GL_ALL_ATTRIB_BITS should not appear
90     * in the table.
91     */
92    { 0x00080000, "0x80000" },
93    { 0x000fffff, "0xfffff" },
94    { (int)0xffffffff, "0xffffffff" },
95 
96    { 0, NULL }
97 };
98