Issues with my test function when data is shuffled

I use the following function to make predictions on the test dataset. However, I find that when I set shuffle=True in the data loader, the order of y_pred and y_true got messed up. I go over this function multiple times but I cannot see where I got wrong. Can someone please help me detect if there is any bug in the following code?

def test(model, device, test_loader, criterion):  
    y_pred = torch.empty(0).to(device)
    y_true = torch.empty(0).to(device)
    with torch.no_grad():
        for img, meteo, target in test_loader:
            img, meteo, target =,, torch.squeeze(
            output = torch.squeeze(model(img, meteo))
            y_pred =, output))
            y_true =, target))
    test_loss = criterion(y_pred, y_true)
    print('Test set Loss: {:.4f}'.format(test_loss))
    return y_pred, y_true, test_loss