summaryrefslogtreecommitdiffstats
path: root/tests/language-feature/enums/enum-array-indexing.slang
blob: c9294ad0c0958c6c59d78e7c2b053ee523e73a7c (plain)
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
//TEST(compute):COMPARE_COMPUTE(filecheck-buffer=CHECK): -shaderobj -output-using-type
//TEST(compute):COMPARE_COMPUTE(filecheck-buffer=CHECK):-cpu -shaderobj -output-using-type
//TEST(compute, vulkan):COMPARE_COMPUTE(filecheck-buffer=CHECK):-vk -shaderobj -output-using-type

// Test that enums can be used as array indices without explicit casting

enum Fruit { Apple, Orange, Banana };

//TEST_INPUT: set outputBuffer = out ubuffer(data=[0 0 0 0], stride=4)
RWStructuredBuffer<int> outputBuffer;

[numthreads(1,1,1)]
void computeMain()
{
    int fruits[10];
    
    // Initialize arrays with some values
    for (int i = 0; i < 10; i++)
    {
        fruits[i] = i * 10;
    }
    
    // Test basic enum indexing - this should work with our fix
    int appleCost = fruits[Fruit::Apple];     // Should access fruits[0] = 0
    int orangeCost = fruits[Fruit::Orange];   // Should access fruits[1] = 10
    int bananaCost = fruits[Fruit::Banana];   // Should access fruits[2] = 20
    
    // CHECK: 0
    outputBuffer[0] = appleCost;
    // CHECK: 10
    outputBuffer[1] = orangeCost;
    // CHECK: 20
    outputBuffer[2] = bananaCost;
    // CHECK: 42
    outputBuffer[3] = 42; // Just a test value
}