You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

85 lines
1.6 KiB
Go

package interpreter
import (
"testing"
)
func TestDefineAndGet(t *testing.T) {
env := newEnvironment(nil)
env.define("x", 42)
value := env.get("x")
if value != 42 {
t.Errorf("expected 42, got %v", value)
}
}
func TestGetUndefinedVariable(t *testing.T) {
defer func() {
if r := recover(); r == nil {
t.Errorf("expected panic for undefined variable")
}
}()
env := newEnvironment(nil)
env.get("x")
}
func TestAssign(t *testing.T) {
env := newEnvironment(nil)
env.define("x", 42)
env.assign("x", 43)
value := env.get("x")
if value != 43 {
t.Errorf("expected 43, got %v", value)
}
}
func TestAssignUndefinedVariable(t *testing.T) {
defer func() {
if r := recover(); r == nil {
t.Errorf("expected panic for assigning undefined variable")
}
}()
env := newEnvironment(nil)
env.assign("x", 43)
}
func TestEnclosingEnvironmentGet(t *testing.T) {
global := newEnvironment(nil)
global.define("x", 42)
local := newEnvironment(global)
value := local.get("x")
if value != 42 {
t.Errorf("expected 42, got %v", value)
}
}
func TestEnclosingEnvironmentAssign(t *testing.T) {
global := newEnvironment(nil)
global.define("x", 42)
local := newEnvironment(global)
local.assign("x", 43)
value := global.get("x")
if value != 43 {
t.Errorf("expected 43, got %v", value)
}
}
func TestEnclosingEnvironmentAssignUndefined(t *testing.T) {
defer func() {
if r := recover(); r == nil {
t.Errorf("expected panic for assigning undefined variable in enclosing environment")
}
}()
global := newEnvironment(nil)
local := newEnvironment(global)
local.assign("x", 43)
}