// maps.vr — demonstrates map/dictionary features

fn main() {
	// create a map using struct literal syntax
	let person = { "name": "alice", "age": 30 }
	
	// access with string index
	assert person["name"] == "alice"
	assert person["age"] == 30
	println("person[\"name\"] = alice")
	println("person[\"age\"] = 30")
	
	// update with string index
	person["age"] = 31
	assert person["age"] == 31
	println("person[\"age\"] after update = 31")
	
	// add new keys dynamically
	person["city"] = "nyc"
	assert person["city"] == "nyc"
	println("person[\"city\"] = nyc")
	
	// check key existence with has()
	assert has(person, "name") == 1
	assert has(person, "missing") == 0
	println("has(person, \"name\") = 1")
	println("has(person, \"missing\") = 0")
	
	// get all keys with keys()
	let k = keys(person)
	assert len(k) == 3
	println("keys count = 3")
	
	// delete a key
	delete(person, "city")
	assert has(person, "city") == 0
	assert len(person) == 2
	println("after delete: len = 2")
	
	// len() works on maps
	let scores = { "math": 95, "english": 88 }
	assert len(scores) == 2
	println("scores len = 2")
	
	// nested maps
	let data = { "user": { "name": "bob" } }
	assert data["user"]["name"] == "bob"
	println("nested access = bob")
	
	// maps in arrays
	let users = [{ "name": "a" }, { "name": "b" }]
	assert users[0]["name"] == "a"
	assert users[1]["name"] == "b"
	println("maps in arrays OK")
	
	// empty map
	let empty = {}
	assert len(empty) == 0
	println("empty map len = 0")
	
	println("All map assertions passed!")
}
