diff --git a/builtin/core.wren b/builtin/core.wren index 8dae8aca..fe501afe 100644 --- a/builtin/core.wren +++ b/builtin/core.wren @@ -1,4 +1,13 @@ class Sequence { + contains(element) { + for (item in this) { + if (element == item) { + return true + } + } + return false + } + count { var result = 0 for (element in this) { @@ -92,15 +101,6 @@ class List is Sequence { } return result } - - contains(element) { - for (item in this) { - if (element == item) { - return true - } - } - return false - } } class Map { diff --git a/doc/site/core/sequence.markdown b/doc/site/core/sequence.markdown index a36e394b..a7bac5e9 100644 --- a/doc/site/core/sequence.markdown +++ b/doc/site/core/sequence.markdown @@ -30,6 +30,10 @@ Otherwise, returns `false`. [1, 2, 3].any {|n| n < 1} // False. [1, 2, 3].any {|n| n > 2} // True. +### **contains**(element) + +Returns whether the sequence contains any element equal to the given element. + ### **join**(sep) Returns a string representation of the list. The string representations of the diff --git a/src/vm/wren_core.c b/src/vm/wren_core.c index 62212e34..853fb738 100644 --- a/src/vm/wren_core.c +++ b/src/vm/wren_core.c @@ -45,6 +45,15 @@ // This string literal is generated automatically from core. Do not edit. static const char* libSource = "class Sequence {\n" +" contains(element) {\n" +" for (item in this) {\n" +" if (element == item) {\n" +" return true\n" +" }\n" +" }\n" +" return false\n" +" }\n" +"\n" " count {\n" " var result = 0\n" " for (element in this) {\n" @@ -138,15 +147,6 @@ static const char* libSource = " }\n" " return result\n" " }\n" -"\n" -" contains(element) {\n" -" for (item in this) {\n" -" if (element == item) {\n" -" return true\n" -" }\n" -" }\n" -" return false\n" -" }\n" "}\n" "\n" "class Map {\n" diff --git a/test/core/list/contains.wren b/test/core/list/contains.wren new file mode 100644 index 00000000..8ceae4d0 --- /dev/null +++ b/test/core/list/contains.wren @@ -0,0 +1,6 @@ +var list = [1, 2, 3, 4, "foo"] + +IO.print(list.contains(2)) // expect: true +IO.print(list.contains(5)) // expect: false +IO.print(list.contains("foo")) // expect: true +IO.print(list.contains("bar")) // expect: false diff --git a/test/core/range/contains.wren b/test/core/range/contains.wren new file mode 100644 index 00000000..97189ef6 --- /dev/null +++ b/test/core/range/contains.wren @@ -0,0 +1,23 @@ +// Ordered range. +IO.print((2..5).contains(1)) // expect: false +IO.print((2..5).contains(2)) // expect: true +IO.print((2..5).contains(5)) // expect: true +IO.print((2..5).contains(6)) // expect: false + +// Backwards range. +IO.print((5..2).contains(1)) // expect: false +IO.print((5..2).contains(2)) // expect: true +IO.print((5..2).contains(5)) // expect: true +IO.print((5..2).contains(6)) // expect: false + +// Exclusive ordered range. +IO.print((2...5).contains(1)) // expect: false +IO.print((2...5).contains(2)) // expect: true +IO.print((2...5).contains(5)) // expect: false +IO.print((2...5).contains(6)) // expect: false + +// Exclusive backwards range. +IO.print((5...2).contains(1)) // expect: false +IO.print((5...2).contains(2)) // expect: false +IO.print((5...2).contains(5)) // expect: true +IO.print((5...2).contains(6)) // expect: false