blob: c91049624aa93d85a165d65d76cb5552800f6e5a [file] [log] [blame]
// Copyright 2024 The Bazel Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
//go:build go1.23
package starlark_test
// This file defines tests of the starlark.Value Go API's go1.23 iterators:
//
// ({Tuple,*List,(Set}).Elements
// Elements
// (*Dict).Entries
// Entries
import (
"fmt"
"reflect"
"testing"
. "go.starlark.net/starlark"
)
func TestTupleElements(t *testing.T) {
tuple := Tuple{MakeInt(1), MakeInt(2), MakeInt(3)}
var got []string
for elem := range tuple.Elements() {
got = append(got, fmt.Sprint(elem))
if len(got) == 2 {
break // skip 3
}
}
for elem := range Elements(tuple) {
got = append(got, fmt.Sprint(elem))
if len(got) == 4 {
break // skip 3
}
}
want := []string{"1", "2", "1", "2"}
if !reflect.DeepEqual(got, want) {
t.Errorf("got %v, want %v", got, want)
}
}
func TestListElements(t *testing.T) {
list := NewList([]Value{MakeInt(1), MakeInt(2), MakeInt(3)})
var got []string
for elem := range list.Elements() {
got = append(got, fmt.Sprint(elem))
if len(got) == 2 {
break // skip 3
}
}
for elem := range Elements(list) {
got = append(got, fmt.Sprint(elem))
if len(got) == 4 {
break // skip 3
}
}
want := []string{"1", "2", "1", "2"}
if !reflect.DeepEqual(got, want) {
t.Errorf("got %v, want %v", got, want)
}
}
func TestSetElements(t *testing.T) {
set := NewSet(3)
set.Insert(MakeInt(1))
set.Insert(MakeInt(2))
set.Insert(MakeInt(3))
var got []string
for elem := range set.Elements() {
got = append(got, fmt.Sprint(elem))
if len(got) == 2 {
break // skip 3
}
}
for elem := range Elements(set) {
got = append(got, fmt.Sprint(elem))
if len(got) == 4 {
break // skip 3
}
}
want := []string{"1", "2", "1", "2"}
if !reflect.DeepEqual(got, want) {
t.Errorf("got %v, want %v", got, want)
}
}
func TestDictEntries(t *testing.T) {
dict := NewDict(2)
dict.SetKey(String("one"), MakeInt(1))
dict.SetKey(String("two"), MakeInt(2))
dict.SetKey(String("three"), MakeInt(3))
var got []string
for k, v := range dict.Entries() {
got = append(got, fmt.Sprintf("%v %v", k, v))
if len(got) == 2 {
break // skip 3
}
}
for k, v := range Entries(dict) {
got = append(got, fmt.Sprintf("%v %v", k, v))
if len(got) == 4 {
break // skip 3
}
}
want := []string{`"one" 1`, `"two" 2`, `"one" 1`, `"two" 2`}
if !reflect.DeepEqual(got, want) {
t.Errorf("got %v, want %v", got, want)
}
}