;; immer - immutable data structures for C++ ;; Copyright (C) 2016, 2017 Juan Pedro Bolivar Puente ;; ;; This file is part of immer. ;; ;; immer is free software: you can redistribute it and/or modify ;; it under the terms of the GNU Lesser General Public License as published by ;; the Free Software Foundation, either version 3 of the License, or ;; (at your option) any later version. ;; ;; immer is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU Lesser General Public License for more details. ;; ;; You should have received a copy of the GNU Lesser General Public License ;; along with immer. If not, see . ;; include:intro/start (use-modules (immer) (rnrs base)) (let ((v1 (ivector 1 "hola" 3 'que #:tal))) (assert (eq? (ivector-ref v1 3) 'que)) (let* ((v2 (ivector-set v1 3 'what)) (v2 (ivector-update v2 2 (lambda (x) (+ 1 x))))) (assert (eq? (ivector-ref v1 2) 3)) (assert (eq? (ivector-ref v1 3) 'que)) (assert (eq? (ivector-ref v2 2) 4)) (assert (eq? (ivector-ref v2 3) 'what)) (let ((v3 (ivector-push v2 "hehe"))) (assert (eq? (ivector-length v3) 6)) (assert (eq? (ivector-ref v3 (- (ivector-length v3) 1)) "hehe"))))) (let ((v (apply ivector (iota 10)))) (assert (eq? (ivector-length v) 10)) (assert (eq? (ivector-length (ivector-drop v 3)) 7)) (assert (eq? (ivector-length (ivector-take v 3)) 3)) (assert (eq? (ivector-length (ivector-append v v)) 20))) (let ((v1 (make-ivector 3)) (v2 (make-ivector 3 ":)"))) (assert (eq? (ivector-ref v1 2) (vector-ref (make-vector 3) 2))) (assert (eq? (ivector-ref v2 2) ":)"))) ;; include:intro/end ;; Experiments (let ((d (dummy))) (dummy-foo d) (dummy-bar d 42)) (gc) (func1) (func2) (func3 (dummy) 12) (foo-func1) (gc)