// Copyright (c) 2024-2026 Celestino Amoroso (celestino.amoroso@gmail.com).
// All rights reserved.

// t_iter-iter_test.go
package expr

import (
	"testing"

	"git.portale-stac.it/go-pkg/expr/types/list"
)

func TestIterIterator(t *testing.T) {
	section := "Iter-Iter"
	inputs := []inputType{
		/*   1 */ {`it=$(..4); $$($(it) filter ${_}==100)`, list.NewLinkedListA(), nil},
		/*   2 */ {`it=$(..4); $$($(it, $_) filter ${_}==100)`, list.NewLinkedListA(), nil},
		/*   3 */ {`it=$(..4); $(it, 10+$_, last-1) digest ${_}`, int64(12), nil},
		/*   4 */ {`f=func(n){last-n}; it=$(..4); $(it, 10+$_, f(-1)) digest ${_}`, int64(14), nil},
	}

	// runTestSuiteSpec(t, section, inputs, 4)
	RunTestSuite(t, section, inputs)
}

// func TestNewIterIterator(t *testing.T) {
// 	var it kern.Iterator
// 	var err error

// 	list := kern.NewListA("a", "b", "c", "d")
// 	itList := NewListIterator(list, []any{1, 3, 1})
// 	it, err = NewIterator(nil, itList, map[string]any{"op": kern.NewFunctor("test")})
// 	if err != nil {
// 		t.Errorf("error: %v", err)
// 	} else {
// 		if item, err := it.Next(); err != nil {
// 			t.Errorf("error: %v", err)
// 		} else if item != "b" {
// 			t.Errorf("expected %q, got %q", "b", item)
// 		} else {
// 			t.Logf("Next: %v", item)
// 		}
// 	}
// }

// func TestNewIterIteratorNoOp(t *testing.T) {
// 	var it kern.Iterator
// 	var err error

// 	list := kern.NewListA("a", "b", "c", "d")
// 	itList := NewListIterator(list, []any{1, 3, 1})
// 	it, err = NewIterator(nil, itList, nil)
// 	if err != nil {
// 		t.Errorf("error: %v", err)
// 	} else {
// 		if item, err := it.Next(); err != nil {
// 			t.Errorf("error: %v", err)
// 		} else if item != "b" {
// 			t.Errorf("expected %q, got %q", "b", item)
// 		} else {
// 			t.Logf("Next: %v", item)
// 		}
// 	}
// }
