From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED!not-for-mail From: Michael Heerdegen Newsgroups: gmane.emacs.devel Subject: [PATCH] Elpa: Pinpoint semantics of `seq-subseq' for streams Date: Tue, 13 Sep 2016 18:23:31 +0200 Message-ID: <87bmzrahvg.fsf@web.de> NNTP-Posting-Host: blaine.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-Trace: blaine.gmane.org 1473783918 8548 195.159.176.226 (13 Sep 2016 16:25:18 GMT) X-Complaints-To: usenet@blaine.gmane.org NNTP-Posting-Date: Tue, 13 Sep 2016 16:25:18 +0000 (UTC) User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/25.1 (gnu/linux) Cc: Nicolas Petton To: Emacs Development Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Tue Sep 13 18:25:14 2016 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by blaine.gmane.org with esmtp (Exim 4.84_2) (envelope-from ) id 1bjqWE-0001Q8-9r for ged-emacs-devel@m.gmane.org; Tue, 13 Sep 2016 18:25:10 +0200 Original-Received: from localhost ([::1]:50025 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bjqWC-0005uT-96 for ged-emacs-devel@m.gmane.org; Tue, 13 Sep 2016 12:25:08 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:44648) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bjqUp-0005ee-Ez for emacs-devel@gnu.org; Tue, 13 Sep 2016 12:23:44 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bjqUk-0008Aj-Ey for emacs-devel@gnu.org; Tue, 13 Sep 2016 12:23:43 -0400 Original-Received: from mout.web.de ([212.227.17.12]:57113) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bjqUk-000899-33 for emacs-devel@gnu.org; Tue, 13 Sep 2016 12:23:38 -0400 Original-Received: from drachen.dragon ([90.186.2.100]) by smtp.web.de (mrweb101) with ESMTPSA (Nemesis) id 0LsyZi-1b0Mgu0FVi-012WOv; Tue, 13 Sep 2016 18:23:34 +0200 X-Provags-ID: V03:K0:cMJ8ILW1jTydrR1pct/9dorfaY0vD67jD7uNko7Zd+IbTywvd70 iXF9pjw1j26XExP8cXy/cD3m6aCL32q52nuuneAcGp2JE1It93QDX/BzCbiSDZ2d5UuEaKS E8jcQmBsYyuNeO0rqX3P5edzkGqdORH3zVMqdFzhPAkOQq1zFpa02d88W47ueFaVPLnfiM5 E/CiUAEXmI+hV0jix79sQ== X-UI-Out-Filterresults: notjunk:1;V01:K0:++gMP/vPOos=:1L5u8Saea+A7I/Yr/Knl/G VV/NCw9WW7cMcDGHxzhSEmX2Piyrl5a2qJA+5VOgQRQO5dU+SIwujq5z6qF63KNIEJ1ujTzmb mcVYJ+OLeHKjggbvr7SzbVfDlrAXe6hmP61BPK2v/j7KGmRvpT3kzvpB0QUEzwUFbNNRCiFoU 2cjDQ/0d+sPuSfRGUFqGM7xb8s5jxnWdXS/yDE3erJEHnyWZfqyny94j78qwXx2dP3xI+ktqn 16VMccXzY+vgn7HSWIG3IjXk7YfcHsnmapol43EtsH0jJpgDmSYnzbUYQQHDbwlbFr75iOH38 f7EiWTd48c75WrdE+PDWIxTiEf6mOEwDTXbdMFVUrPXZWOCvIOMH/pjO6AdA8KhtwevZxOSE2 sRXqC6Alj+wDgtE+S7PAG8rCnVqshEuldAgOEVZCzgVCiB9ngvbLiEvOnA+9wsZCP+NpmoEk2 AIk8xNH6Vv9Yl49M5MaIf54w4ItYL/7E317jUz01H6R8uht+PrdVDLcG6Rp4dD2jBMs58x/WV LOna0qEMvE6qQHgACEOZ4Ue4suazuR1mkUahEh5rtf7Pwsu+wlkAU1gcNRnNV64amCNed31hc 4ivxBfxApoPmY4Ur3TtwXogDzI3wTF1J2ny4ueIyFjp0GPMiPi2JH9aRTj0c1/lzS/Sq7nqON a0wVnSk1QTeDrL8iXfSQgD6hBlyq7Q/zja2eP80YKStSnMaCH+4l+cOy5f70x5iHvlCzuEXGF ti0gwKLoZ0J9F1tslP+0Dmd5h0qTHRoG6Ax8pYRwX9jFYTOr004EWhy2HCYW9ohLRfpfwJVq X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 212.227.17.12 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Original-Sender: "Emacs-devel" Xref: news.gmane.org gmane.emacs.devel:207419 Archived-At: --=-=-= Content-Type: text/plain Hi, I would like to install the following patch to Gnu Elpa. Does it look ok to you, Nicolas? --=-=-= Content-Type: text/x-diff Content-Disposition: inline; filename=Pinpoint-semantics-of-seq-subseq-s-implementation-for-streams.patch >From 77871facc3b00b8fe6d032e38c4b229d114a97ae Mon Sep 17 00:00:00 2001 From: Michael Heerdegen Date: Wed, 7 Sep 2016 15:45:07 +0200 Subject: [PATCH] Pinpoint semantics of `seq-subseq's implementation for streams - Make argument END optional. - Forbid negative index arguments. - Add tests. --- packages/stream/stream.el | 15 +++++++++++++-- packages/stream/tests/stream-tests.el | 10 ++++++++-- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/packages/stream/stream.el b/packages/stream/stream.el index 8c156f1..9954fc8 100644 --- a/packages/stream/stream.el +++ b/packages/stream/stream.el @@ -229,8 +229,19 @@ This function will eagerly consume the entire stream." (setq stream (stream-rest stream))) len)) -(cl-defmethod seq-subseq ((stream stream) start end) - (seq-take (seq-drop stream start) (- end start))) +(cl-defmethod seq-subseq ((stream stream) start &optional end) + "Return a stream of elements of STREAM from START to END. + +END is exclusive. If END is omitted, include all elements from +START on. Both START and END must be non-negative. Since +streams are a delayed type of sequences, don't signal an error if +START or END are larger than the number of elements (the returned +stream will simply be accordingly shorter, or even empty)." + (when (or (< start 0) (and end (< end 0))) + (error "seq-subseq: only non-negative indexes allowed for streams")) + (let ((stream-from-start (seq-drop stream start))) + (if end (seq-take stream-from-start (- end start)) + stream-from-start))) (cl-defmethod seq-into-sequence ((stream stream)) "Convert STREAM into a sequence." diff --git a/packages/stream/tests/stream-tests.el b/packages/stream/tests/stream-tests.el index 16b5756..31c3530 100644 --- a/packages/stream/tests/stream-tests.el +++ b/packages/stream/tests/stream-tests.el @@ -112,8 +112,14 @@ (should (stream-empty-p (stream-rest (stream-rest rest)))))) (ert-deftest stream-seq-subseq-test () - ;; TODO - ) + (should (equal (seq-into (seq-subseq (stream (list 0 1 2 3 4)) 1 3) 'list) + (seq-subseq (list 0 1 2 3 4) 1 3))) + (should (= (stream-first (seq-subseq (stream-range 0) 5)) + 5)) + (should (= (stream-first (seq-subseq (seq-subseq (stream-range 0) 5) 5)) + 10)) + + (should-error (seq-subseq (stream-range 0) -1))) (ert-deftest stream-seq-into-test () (should (streamp (seq-into (stream-empty) 'stream))) -- 2.9.3 --=-=-= Content-Type: text/plain Regards, Michael. --=-=-=--