commit 54f951bb8b128744ee469b77985a5ce31753166f
parent 07b1af11d2b4b75bcd2a7ef4591d0918868760d2
Author: Georges Dupéron <georges.duperon@gmail.com>
Date: Sat, 7 Jan 2017 23:00:17 +0100
Tests, doc-coverage, dependencies
Diffstat:
7 files changed, 50 insertions(+), 18 deletions(-)
diff --git a/.gitignore b/.gitignore
@@ -4,3 +4,4 @@
.DS_Store
compiled/
/doc/
+/coverage/
+\ No newline at end of file
diff --git a/.travis.yml b/.travis.yml
@@ -51,8 +51,10 @@ before_script:
# packages without it getting stuck on a confirmation prompt.
script:
- raco test -x -p tr-immutable
+ - if test $RACKET_VERSION != 6.0 -a $RACKET_VERSION != 6.1; then raco setup --check-pkg-deps --pkgs tr-immutable; fi
+ - raco pkg install --deps search-auto doc-coverage
+ - raco doc-coverage tr-immutable
+ - raco pkg install --deps search-auto cover cover-codecov
+ - raco cover -s doc -s test -s main -f codecov -d $TRAVIS_BUILD_DIR/coverage .
after_success:
- - raco setup --check-pkg-deps --pkgs tr-immutable
- - raco pkg install --deps search-auto cover cover-coveralls
- - raco cover -b -f coveralls -d $TRAVIS_BUILD_DIR/coverage .
diff --git a/info.rkt b/info.rkt
@@ -1,8 +1,12 @@
#lang info
(define collection "tr-immutable")
(define deps '("base"
- "rackunit-lib"))
-(define build-deps '("scribble-lib" "racket-doc"))
+ "rackunit-lib"
+ "typed-racket-lib"
+ "typed-racket-more"))
+(define build-deps '("scribble-lib"
+ "racket-doc"
+ "typed-racket-doc"))
(define scribblings '(("scribblings/tr-immutable.scrbl" ())))
(define pkg-desc "Description Here")
(define version "0.0")
diff --git a/main.rkt b/main.rkt
@@ -1,15 +1,14 @@
#lang typed/racket/base
-(module unsafe racket/base
- ;; TODO: make this a vector in the implementation, but make TR think it's a
- ;; list (via a contract?)
- (provide (struct-out ivector))
- (struct ivector (v) #:mutable)
- )
-
(require typed/racket/unsafe)
-(unsafe-require/typed 'unsafe
+
+(provide IVectorof
+ (rename-out [new-ivector ivector]))
+
+(unsafe-require/typed tr-immutable/private/unsafe
[#:struct (A) ivector ([v : (Listof A)])
- #:type-name IVector])
+ #:type-name IVectorof])
-(make-predicate (IVector Integer))
-\ No newline at end of file
+(: new-ivector (∀ (A) (→ A * (IVectorof A))))
+(define (new-ivector . vs)
+ (ivector vs))
+\ No newline at end of file
diff --git a/private/unsafe.rkt b/private/unsafe.rkt
@@ -0,0 +1,6 @@
+#lang racket/base
+
+;; TODO: make this a vector in the implementation, but make TR think it's a
+;; list (via a contract?)
+(provide (struct-out ivector))
+(struct ivector (v) #:mutable)
diff --git a/scribblings/tr-immutable.scrbl b/scribblings/tr-immutable.scrbl
@@ -1,10 +1,22 @@
#lang scribble/manual
@require[@for-label[tr-immutable
- racket/base]]
+ typed/racket/base]]
@title{tr-immutable}
@author{georges}
@defmodule[tr-immutable]
-Package Description Here
+This library implements immutable wrappers for @racket[vector] and
+@racket[box], in a way that @racketmodname[typed/racket] is able to recognise.
+This makes it possible to write @racket[(make-predicate (IVectorof Integer))]
+in current versions of Typed/Racket.
+
+@defform[#:kind "type"
+ (IVectorof A)]{
+ The type for immutable vectors containing elements of type @racket[A].
+}
+
+@defproc[(ivector [v : A] ...) (IVectorof A)]{
+ The type for immutable vectors containing elements of type @racket[A].
+}
+\ No newline at end of file
diff --git a/test/test-vector.rkt b/test/test-vector.rkt
@@ -0,0 +1,5 @@
+#lang typed/racket
+
+(require tr-immutable
+ typed/rackunit)
+(check-pred (make-predicate (IVectorof Positive-Byte)) (ivector 1 2 3))
+\ No newline at end of file