diff --git a/test/propeller/push/instructions/vector_spec.clj b/test/propeller/push/instructions/vector_spec.clj index a612ba1..d970071 100644 --- a/test/propeller/push/instructions/vector_spec.clj +++ b/test/propeller/push/instructions/vector_spec.clj @@ -154,26 +154,6 @@ (gen-specs "first" check-first :vector) -;;; vector/_last - -(defn check-last - [value-type vect] - (let [stack-type (keyword (str "vector_" value-type)) - start-state (state/push-to-stack state/empty-state - stack-type - vect) - end-state (vector/_last stack-type start-state)] - (or - (and (empty? vect) - (= (state/peek-stack end-state stack-type) - vect)) - (and - (= (last vect) - (state/peek-stack end-state (keyword value-type))) - (state/empty-stack? end-state stack-type))))) - -(gen-specs "last" check-last :vector) - ;;; vector/_indexof (defn check-indexof @@ -196,6 +176,41 @@ (gen-specs "indexof" check-indexof :vector :item) +;;; vector/_last + +(defn check-last + [value-type vect] + (let [stack-type (keyword (str "vector_" value-type)) + start-state (state/push-to-stack state/empty-state + stack-type + vect) + end-state (vector/_last stack-type start-state)] + (or + (and (empty? vect) + (= (state/peek-stack end-state stack-type) + vect)) + (and + (= (last vect) + (state/peek-stack end-state (keyword value-type))) + (state/empty-stack? end-state stack-type))))) + +(gen-specs "last" check-last :vector) + +;;; vector/_length + +(defn check-length + [value-type vect] + (let [stack-type (keyword (str "vector_" value-type)) + start-state (state/push-to-stack state/empty-state + stack-type + vect) + end-state (vector/_length stack-type start-state) + expected-result (count vect)] + (= expected-result + (state/peek-stack end-state :integer)))) + +(gen-specs "length" check-length :vector) + ;;; vector/_subvec (defn clean-subvec-bounds