             reel_weights[j] += symbol_weight.weight;
         }
     }
+    for(i = 0; i < NUM_REELS; i++) {
+        printf("**Reel #%d, weight: %d\n", i, reel_weights[i]);
+    }
 
     printf("**Initializing lines\n");
     int possible_lines[NUM_LINES * NUM_REELS] = {

    }
    return result;
}
__device__ int isWin(payout_t payout, symbol_weight_t *line) {
    int payout_symbol_count = 0;
    int index = 0;

    }
    return 0;
}

//counts a line as a win only if the in order symbols are consecutive
__device__ int isWinConsecutive(payout_t payout, symbol_weight_t *line) {
    int consecutive_payout_symbol_count = 0;
    int index = 0;
    int current_consecutive_count = 0;
    for (index = 0; index < NUM_REELS; index++) {
        symbol_weight_t symbol_weight = line[index];
        if(symbol_weight.symbol == payout.symbol) {
            current_consecutive_count += 1;
            if(current_consecutive_count > consecutive_payout_symbol_count) {
                consecutive_payout_symbol_count = current_consecutive_count;
            }
        }
        else {
            current_consecutive_count = 0;
        }
    }
    if (consecutive_payout_symbol_count == payout.frequency) {
        return 1;
    }
    return 0;
}


__global__ void calculateExpectedValue(const int num_symbols_per_reel, const int num_payouts, const int total_choices,
									   int *device_possible_lines, symbol_weight_t *device_symbols_weights, payout_t *device_payouts, double *device_expected_values, int *device_payout_frequencies) {
