diff --git a/lexer/lexer_test.go b/lexer/lexer_test.go
index 94a1627..b16f2ed 100644
--- a/lexer/lexer_test.go
+++ b/lexer/lexer_test.go
@@ -149,6 +149,158 @@
 	assertTokens(t, expect, tokens)
 }
 
+func TestTokenizeSingleIdent(t *testing.T) {
+	tokens, err := Tokenize("x")
+	if err != nil {
+		t.Fatalf("unexpected error: %v", err)
+	}
+	expect := []token.Token{
+		{Type: token.Ident, Literal: "x", Pos: 0},
+		{Type: token.EOF, Literal: "", Pos: 1},
+	}
+	assertTokens(t, expect, tokens)
+}
+
+func TestTokenizeMultiCharIdent(t *testing.T) {
+	tokens, err := Tokenize("foo")
+	if err != nil {
+		t.Fatalf("unexpected error: %v", err)
+	}
+	expect := []token.Token{
+		{Type: token.Ident, Literal: "foo", Pos: 0},
+		{Type: token.EOF, Literal: "", Pos: 3},
+	}
+	assertTokens(t, expect, tokens)
+}
+
+func TestTokenizeIdentWithDigits(t *testing.T) {
+	tokens, err := Tokenize("x2")
+	if err != nil {
+		t.Fatalf("unexpected error: %v", err)
+	}
+	expect := []token.Token{
+		{Type: token.Ident, Literal: "x2", Pos: 0},
+		{Type: token.EOF, Literal: "", Pos: 2},
+	}
+	assertTokens(t, expect, tokens)
+}
+
+func TestTokenizeIdentWithUnderscore(t *testing.T) {
+	tokens, err := Tokenize("my_func")
+	if err != nil {
+		t.Fatalf("unexpected error: %v", err)
+	}
+	expect := []token.Token{
+		{Type: token.Ident, Literal: "my_func", Pos: 0},
+		{Type: token.EOF, Literal: "", Pos: 7},
+	}
+	assertTokens(t, expect, tokens)
+}
+
+func TestTokenizeComma(t *testing.T) {
+	tokens, err := Tokenize(",")
+	if err != nil {
+		t.Fatalf("unexpected error: %v", err)
+	}
+	expect := []token.Token{
+		{Type: token.Comma, Literal: ",", Pos: 0},
+		{Type: token.EOF, Literal: "", Pos: 1},
+	}
+	assertTokens(t, expect, tokens)
+}
+
+func TestTokenizeEquals(t *testing.T) {
+	tokens, err := Tokenize("=")
+	if err != nil {
+		t.Fatalf("unexpected error: %v", err)
+	}
+	expect := []token.Token{
+		{Type: token.Equals, Literal: "=", Pos: 0},
+		{Type: token.EOF, Literal: "", Pos: 1},
+	}
+	assertTokens(t, expect, tokens)
+}
+
+func TestTokenizeFuncDefinition(t *testing.T) {
+	tokens, err := Tokenize("f(x) = x + 1")
+	if err != nil {
+		t.Fatalf("unexpected error: %v", err)
+	}
+	expect := []token.Token{
+		{Type: token.Ident, Literal: "f", Pos: 0},
+		{Type: token.LParen, Literal: "(", Pos: 1},
+		{Type: token.Ident, Literal: "x", Pos: 2},
+		{Type: token.RParen, Literal: ")", Pos: 3},
+		{Type: token.Equals, Literal: "=", Pos: 5},
+		{Type: token.Ident, Literal: "x", Pos: 7},
+		{Type: token.Plus, Literal: "+", Pos: 9},
+		{Type: token.Number, Literal: "1", Pos: 11},
+		{Type: token.EOF, Literal: "", Pos: 12},
+	}
+	assertTokens(t, expect, tokens)
+}
+
+func TestTokenizeFuncCallWithArgs(t *testing.T) {
+	tokens, err := Tokenize("f(1, 2)")
+	if err != nil {
+		t.Fatalf("unexpected error: %v", err)
+	}
+	expect := []token.Token{
+		{Type: token.Ident, Literal: "f", Pos: 0},
+		{Type: token.LParen, Literal: "(", Pos: 1},
+		{Type: token.Number, Literal: "1", Pos: 2},
+		{Type: token.Comma, Literal: ",", Pos: 3},
+		{Type: token.Number, Literal: "2", Pos: 5},
+		{Type: token.RParen, Literal: ")", Pos: 6},
+		{Type: token.EOF, Literal: "", Pos: 7},
+	}
+	assertTokens(t, expect, tokens)
+}
+
+func TestTokenizeMultiParamFuncDef(t *testing.T) {
+	tokens, err := Tokenize("add(x, y) = x + y")
+	if err != nil {
+		t.Fatalf("unexpected error: %v", err)
+	}
+	expect := []token.Token{
+		{Type: token.Ident, Literal: "add", Pos: 0},
+		{Type: token.LParen, Literal: "(", Pos: 3},
+		{Type: token.Ident, Literal: "x", Pos: 4},
+		{Type: token.Comma, Literal: ",", Pos: 5},
+		{Type: token.Ident, Literal: "y", Pos: 7},
+		{Type: token.RParen, Literal: ")", Pos: 8},
+		{Type: token.Equals, Literal: "=", Pos: 10},
+		{Type: token.Ident, Literal: "x", Pos: 12},
+		{Type: token.Plus, Literal: "+", Pos: 14},
+		{Type: token.Ident, Literal: "y", Pos: 16},
+		{Type: token.EOF, Literal: "", Pos: 17},
+	}
+	assertTokens(t, expect, tokens)
+}
+
+func TestTokenizeFuncCallInExpression(t *testing.T) {
+	tokens, err := Tokenize("f(1+2, 3*4) + 5")
+	if err != nil {
+		t.Fatalf("unexpected error: %v", err)
+	}
+	expect := []token.Token{
+		{Type: token.Ident, Literal: "f", Pos: 0},
+		{Type: token.LParen, Literal: "(", Pos: 1},
+		{Type: token.Number, Literal: "1", Pos: 2},
+		{Type: token.Plus, Literal: "+", Pos: 3},
+		{Type: token.Number, Literal: "2", Pos: 4},
+		{Type: token.Comma, Literal: ",", Pos: 5},
+		{Type: token.Number, Literal: "3", Pos: 7},
+		{Type: token.Star, Literal: "*", Pos: 8},
+		{Type: token.Number, Literal: "4", Pos: 9},
+		{Type: token.RParen, Literal: ")", Pos: 10},
+		{Type: token.Plus, Literal: "+", Pos: 12},
+		{Type: token.Number, Literal: "5", Pos: 14},
+		{Type: token.EOF, Literal: "", Pos: 15},
+	}
+	assertTokens(t, expect, tokens)
+}
+
 // assertTokens is a test helper that compares two token slices.
 func assertTokens(t *testing.T, want, got []token.Token) {
 	t.Helper()
