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
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)
|
|
}
|