Serial returns -1

My serial is returning -1 everytime serial is used.
I’m using a USB and sending the serial from my PC on 9600.

#include <LiquidCrystal.h>

LiquidCrystal lcd(6, 7, 13, 12, 11, 10);

int value = Serial.read();


/* Cache for storing values */
int cache1 = '~';
int cache2 = '~';
int cache3 = '~';
int cache4 = '~';
int cache5 = '~';
int cache6 = '~';
int cache7 = '~';
int cache8 = '~';
int cache9 = '~';
int cache10 = '~';
int cache11 = '~';
int cache12 = '~';
int cache13 = '~';
int cache14 = '~';
int cache15 = '~';
int cache16 = '~';
int cache17 = '~';
int cache18 = '~';
int cache19 = '~';
int cache20 = '~';
int cache21 = '~';
int cache22 = '~';
int cache23 = '~';
int cache24 = '~';
int cache25 = '~';
int cache26 = '~';
int cache27 = '~';
int cache28 = '~';
int cache29 = '~';
int cache30 = '~';
int cache31 = '~';
int cache32 = '~';

void setup() 
{
  Serial.begin(9600);
}

void loop() 
{
  if (Serial.available())
  {
    Serial.println(value);
    if (value == 1)
    {
      Serial.println("Test complete!");
      lcd.println("Test Complete!");
    }
  }
}
int value = Serial.read();

WTF? The Serial instance isn't even set up at this point.

/* Cache for storing values */
int cache1 = '~';
int cache2 = '~';
int cache3 = '~';

Never hear of arrays, eh? Why are you storing a char in an int variable?

  if (Serial.available())
  {
    Serial.println(value);
    if (value == 1)

Hey, you forgot to read the Serial data.

Serial.read() returns -1 if there are no characters in the buffer.

Trash everything you wrote and try this

#include <LiquidCrystal.h>

LiquidCrystal lcd(6, 7, 13, 12, 11, 10);

int cache[33];
void setup()
{
    Serial.begin(9600);
    for(byte i = 1; i <= 32; i++) cache[i] = '~';
}

void loop()
{
    if (Serial.available())
    {
        int value = Serial.read();
        Serial.println(value);
        if (value == 1)
        {
            Serial.println("Test complete!");
            lcd.println("Test Complete!");
        }
    }
}

Then go back to the books and re-read “My First Sketch”

int value = Serial.read();

:

if (Serial.available())
  {
    Serial.println(value);

This seems to be a pretty common mistake for beginners.

When you have a program statement like:

int value = Serial.read();

or

int value = digitalRead(1);

that assigns the result of the function call to value AT THE TIME THE STATEMENT IS EXECUTED.
it does NOT mean that the next time you use "value" that the function will be called again; it still contains the value from "a long time ago", and will, until you do another "value = ..." statement.