Const array same as PROGMEM? [Edit: Answer=No]

Hi. Here's a simple program:

// 100 byte test array:
const byte TestArray[] = {1,2,1,2,1,2,1,2,1,2,\
                          1,2,1,2,1,2,1,2,1,2,\
                          1,2,1,2,1,2,1,2,1,2,\
                          1,2,1,2,1,2,1,2,1,2,\
                          1,2,1,2,1,2,1,2,1,2,\
                          1,2,1,2,1,2,1,2,1,2,\
                          1,2,1,2,1,2,1,2,1,2,\
                          1,2,1,2,1,2,1,2,1,2,\
                          1,2,1,2,1,2,1,2,1,2,\
                          1,2,1,2,1,2,1,2,1,2,};

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

void loop()
{
  byte a = Serial.read();
  Serial.write(TestArray[a]);    // Option 1
  //Serial.write(TestArray[1]);    // Option 2
}

The program receives a byte ('a') from the serial connection. Option 1 and 2 are alternative lines. Option 1 uses 'a' to look up a value from TestArray[] and sends it back. Option 2 ignores 'a' and sends back the same value every time.

In option 2 the program has no need to store TestArray[], as it only ever uses one of the values it contains. The compiler appears to optimise it out completely.
Option 1 requires the program to have every value in TestArray[] available. The program has a larger compiled size, which grows further if the size of TestArray[] is increased, and so is apparently storing the array in program memory, not RAM.

My question is: The const array appears to be working exactly like a PROGMEM declaration. Is there any difference in practice between the two? If not, is there every any need to use PROGMEM to store numbers, since a const array allows more elegant and readable code?

The const array appears to be working exactly like a PROGMEM declaration

Appearances can be deceptive.
The data has to go in flash, whether or not the ultimate destination is RAM, so affects program size reported.

Your const array ends up in RAM.

I see. So the only way to get an array into program memory is to use PROGMEM.

Incidentally, is there any way to check on RAM usage from the Arduino environment?

Incidentally, is there any way to check on RAM usage from the Arduino environment?

What do you mean by "the Arduino environment"? The IDE? If so, the answer is no. RAM usage is dynamic. It changes as functions are called (the stack grows) and returns happen (the stack shrinks). It changes as variables go into and out of scope.

http://playground.arduino.cc/Code/AvailableMemory
shows how to determine, at specific places in your code, how much SRAM is available. Judicious placement is important.

I meant the IDE. But thanks, that's helpful.