Merge remote-tracking branch 'origin/master' into modern-harvey2
						commit
						a2e8fb9050
					
				| 
						 | 
				
			
			@ -154,7 +154,7 @@ ARTICLE: "c-pointers" "Passing pointers to C functions"
 | 
			
		|||
ARTICLE: "c-boxes" "C value boxes"
 | 
			
		||||
"Sometimes it is useful to create a byte array storing a single C value, like a struct with a single field. A pair of utility words exist to make this more convenient:"
 | 
			
		||||
{ $subsections <ref> deref }
 | 
			
		||||
"These words can be used to in conjuction with, or instead of, " { $link with-out-parameters } " to handle \"out-parameters\". For example, if a function is declared in the following way:"
 | 
			
		||||
"These words can be used to in conjunction with, or instead of, " { $link with-out-parameters } " to handle \"out-parameters\". For example, if a function is declared in the following way:"
 | 
			
		||||
{ $code
 | 
			
		||||
  "FUNCTION: int do_foo ( int* a )"
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,14 +1,23 @@
 | 
			
		|||
USING: accessors calendar calendar.format io io.streams.string
 | 
			
		||||
kernel math.order sequences tools.test ;
 | 
			
		||||
USING: accessors calendar calendar.format sequences tools.test ;
 | 
			
		||||
IN: calendar.format.tests
 | 
			
		||||
 | 
			
		||||
{ } [ now timestamp>rfc3339 drop ] unit-test
 | 
			
		||||
{ } [ now timestamp>rfc822 drop ] unit-test
 | 
			
		||||
CONSTANT: testtime T{ timestamp
 | 
			
		||||
    { year 2018 }
 | 
			
		||||
    { month 2 }
 | 
			
		||||
    { day 15 }
 | 
			
		||||
    { hour 8 }
 | 
			
		||||
    { minute 51 }
 | 
			
		||||
    { second 44+423303/500000 }
 | 
			
		||||
    { gmt-offset T{ duration { hour -8 } } }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
{ "2018-02-15T08:51:44.846606-08:00" } [ testtime timestamp>rfc3339 ] unit-test
 | 
			
		||||
 | 
			
		||||
{ "Thu, 15 Feb 2018 08:51:44 -0800" } [ testtime timestamp>rfc822 ] unit-test
 | 
			
		||||
 | 
			
		||||
{ }
 | 
			
		||||
[ { 2008 2009 } [ year. ] each ] unit-test
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
{ "03:01:59" } [
 | 
			
		||||
    3 hours 1 >>minute 59 >>second duration>hms
 | 
			
		||||
] unit-test
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,6 @@
 | 
			
		|||
! Copyright (C) 2016 Alexander Ilin.
 | 
			
		||||
! See http://factorcode.org/license.txt for BSD license.
 | 
			
		||||
USING: tools.test checksums checksums.crc16 ;
 | 
			
		||||
IN: checksums.crc16.tests
 | 
			
		||||
 | 
			
		||||
{ B{ 0xb8 0x80 } } [
 | 
			
		||||
    B{ 0x01 0x04 0x02 0xFF 0xFF } crc16 checksum-bytes
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,19 +1,17 @@
 | 
			
		|||
! Copyright (C) 2010 John Benediktsson
 | 
			
		||||
! See http://factorcode.org/license.txt for BSD license
 | 
			
		||||
USING: checksums checksums.internet tools.test ;
 | 
			
		||||
IN: checksums.internet.tests
 | 
			
		||||
 | 
			
		||||
{ B{ 255 255 } } [ { } internet checksum-bytes ] unit-test
 | 
			
		||||
{ B{ 254 255 } } [ { 1 } internet checksum-bytes ] unit-test
 | 
			
		||||
{ B{ 254 253 } } [ { 1 2 } internet checksum-bytes ] unit-test
 | 
			
		||||
{ B{ 251 253 } } [ { 1 2 3 } internet checksum-bytes ] unit-test
 | 
			
		||||
 | 
			
		||||
: test-data ( -- bytes )
 | 
			
		||||
{ B{ 34 13 } } [
 | 
			
		||||
    B{
 | 
			
		||||
        0x00 0x01
 | 
			
		||||
        0xf2 0x03
 | 
			
		||||
        0xf4 0xf5
 | 
			
		||||
        0xf6 0xf7
 | 
			
		||||
    } ;
 | 
			
		||||
 | 
			
		||||
{ B{ 34 13 } } [ test-data internet checksum-bytes ] unit-test
 | 
			
		||||
    } internet checksum-bytes
 | 
			
		||||
] unit-test
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,6 @@
 | 
			
		|||
! Copyright (C) 2017 Jon Harper.
 | 
			
		||||
! See http://factorcode.org/license.txt for BSD license.
 | 
			
		||||
USING: checksums checksums.ripemd strings tools.test ;
 | 
			
		||||
IN: checksums.ripemd.tests
 | 
			
		||||
 | 
			
		||||
{ B{
 | 
			
		||||
    0x9c 0x11 0x85 0xa5 0xc5
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -3,9 +3,6 @@ checksums.sha.private io.encodings.binary io.streams.byte-array
 | 
			
		|||
kernel math.parser sequences tools.test random ;
 | 
			
		||||
IN: checksums.sha.tests
 | 
			
		||||
 | 
			
		||||
: test-checksum ( text identifier -- checksum )
 | 
			
		||||
    checksum-bytes bytes>hex-string ;
 | 
			
		||||
 | 
			
		||||
{ "a9993e364706816aba3e25717850c26c9cd0d89d" } [ "abc" sha1 checksum-bytes bytes>hex-string ] unit-test
 | 
			
		||||
{ "84983e441c3bd26ebaae4aa1f95129e5e54670f1" } [ "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" sha1 checksum-bytes bytes>hex-string ] unit-test
 | 
			
		||||
! [ "34aa973cd4c4daa4f61eeb2bdbad27316534016f" ] [ 1000000 char: a fill string>sha1str ] unit-test ! takes a long time...
 | 
			
		||||
| 
						 | 
				
			
			@ -16,36 +13,36 @@ IN: checksums.sha.tests
 | 
			
		|||
{ "75388b16512776cc5dba5da1fd890150b0c6455cb4f58b1952522525" }
 | 
			
		||||
[
 | 
			
		||||
    "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"
 | 
			
		||||
    sha-224 test-checksum
 | 
			
		||||
    sha-224 checksum-bytes bytes>hex-string
 | 
			
		||||
] unit-test
 | 
			
		||||
 | 
			
		||||
{ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" }
 | 
			
		||||
[ "" sha-256 test-checksum ] unit-test
 | 
			
		||||
[ "" sha-256 checksum-bytes bytes>hex-string ] unit-test
 | 
			
		||||
 | 
			
		||||
{ "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad" }
 | 
			
		||||
[ "abc" sha-256 test-checksum ] unit-test
 | 
			
		||||
[ "abc" sha-256 checksum-bytes bytes>hex-string ] unit-test
 | 
			
		||||
 | 
			
		||||
{ "f7846f55cf23e14eebeab5b4e1550cad5b509e3348fbc4efa3a1413d393cb650" }
 | 
			
		||||
[ "message digest" sha-256 test-checksum ] unit-test
 | 
			
		||||
[ "message digest" sha-256 checksum-bytes bytes>hex-string ] unit-test
 | 
			
		||||
 | 
			
		||||
{ "71c480df93d6ae2f1efad1447c66c9525e316218cf51fc8d9ed832f2daf18b73" }
 | 
			
		||||
[ "abcdefghijklmnopqrstuvwxyz" sha-256 test-checksum ] unit-test
 | 
			
		||||
[ "abcdefghijklmnopqrstuvwxyz" sha-256 checksum-bytes bytes>hex-string ] unit-test
 | 
			
		||||
 | 
			
		||||
{ "db4bfcbd4da0cd85a60c3c37d3fbd8805c77f15fc6b1fdfe614ee0a7c8fdb4c0" }
 | 
			
		||||
[
 | 
			
		||||
    "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
 | 
			
		||||
    sha-256 test-checksum
 | 
			
		||||
    sha-256 checksum-bytes bytes>hex-string
 | 
			
		||||
] unit-test
 | 
			
		||||
 | 
			
		||||
{ "f371bc4a311f2b009eef952dd83ca80e2b60026c8e935592d0f9c308453c813e" }
 | 
			
		||||
[
 | 
			
		||||
    "12345678901234567890123456789012345678901234567890123456789012345678901234567890"
 | 
			
		||||
    sha-256 test-checksum
 | 
			
		||||
    sha-256 checksum-bytes bytes>hex-string
 | 
			
		||||
] unit-test
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
! [ "8e959b75dae313da8cf4f72814fc143f8f7779c6eb9f7fa17299aeadb6889018501d289e4900f7e4331b99dec4b5433ac7d329eeb6dd26545e96e55b874be909" ]
 | 
			
		||||
! [ "abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu" sha-512 test-checksum ] unit-test
 | 
			
		||||
! [ "abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu" sha-512 checksum-bytes bytes>hex-string ] unit-test
 | 
			
		||||
 | 
			
		||||
{
 | 
			
		||||
    t
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -46,7 +46,7 @@ HELP: basic-block
 | 
			
		|||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
{ $notes "A basic-block is an " { $link identity-tuple } " becase it is used as a hash table key by the compiler." } ;
 | 
			
		||||
{ $notes "A basic-block is an " { $link identity-tuple } " because it is used as a hash table key by the compiler." } ;
 | 
			
		||||
 | 
			
		||||
HELP: <basic-block>
 | 
			
		||||
{ $values { "bb" basic-block } }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -53,7 +53,7 @@ HELP: ##alien-indirect
 | 
			
		|||
 | 
			
		||||
HELP: ##allot
 | 
			
		||||
{ $class-description
 | 
			
		||||
  "An instruction for allocating memory in the nursery. Usually the instruction is preceeded by " { $link ##check-nursery-branch } " which checks that there is enough room in the nursery to allocate. It has the following slots:"
 | 
			
		||||
  "An instruction for allocating memory in the nursery. Usually the instruction is preceded by " { $link ##check-nursery-branch } " which checks that there is enough room in the nursery to allocate. It has the following slots:"
 | 
			
		||||
  { $table
 | 
			
		||||
    { { $slot "dst" } { "Register to put the pointer to the memory in." } }
 | 
			
		||||
    { { $slot "size" } { "Number of bytes to allocate." } }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -12,7 +12,7 @@ HELP: destruct-ssa
 | 
			
		|||
{ $description "Main entry point for the SSA destruction compiler pass." } ;
 | 
			
		||||
 | 
			
		||||
ARTICLE: "compiler.cfg.ssa.destruction" "SSA Destruction"
 | 
			
		||||
"SSA destruction compiler pass. It is preceeded by " { $vocab-link "compiler.cfg.save-contexts" } " and followed by " { $vocab-link "compiler.cfg.linear-scan" } "."
 | 
			
		||||
"SSA destruction compiler pass. It is preceded by " { $vocab-link "compiler.cfg.save-contexts" } " and followed by " { $vocab-link "compiler.cfg.linear-scan" } "."
 | 
			
		||||
$nl
 | 
			
		||||
"Because of the design of the register allocator, this pass has three peculiar properties."
 | 
			
		||||
{ $list
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -18,7 +18,7 @@ HELP: pending
 | 
			
		|||
{ $class-description "A stack location is pending at a location if all paths from the entry block to the location write the location." } ;
 | 
			
		||||
 | 
			
		||||
ARTICLE: "compiler.cfg.stacks.global" "Global stack analysis"
 | 
			
		||||
"This vocab defines a bunch of dataflow analysises:"
 | 
			
		||||
"This vocab defines a bunch of dataflow analyses:"
 | 
			
		||||
{ $subsections avail anticip dead live pending }
 | 
			
		||||
"The info they gather is used by " { $link finalize-stack-shuffling } " for optimal insertion of " { $link ##peek } " and " { $link ##replace } " instructions." ;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -38,7 +38,7 @@ HELP: gc-map-needed?
 | 
			
		|||
 | 
			
		||||
HELP: gc-root-offsets
 | 
			
		||||
{ $values { "gc-map" gc-map } { "offsets" sequence } }
 | 
			
		||||
{ $description "Gets the offets of all roots in a gc-map. The " { $link cfg } " variable must have been set and the stack-frame slot been initialized." } ;
 | 
			
		||||
{ $description "Gets the offsets of all roots in a gc-map. The " { $link cfg } " variable must have been set and the stack-frame slot been initialized." } ;
 | 
			
		||||
 | 
			
		||||
HELP: serialize-gc-maps
 | 
			
		||||
{ $values { "byte-array" byte-array } }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -51,7 +51,7 @@ HELP: rel-decks-offset
 | 
			
		|||
 | 
			
		||||
HELP: rel-literal
 | 
			
		||||
{ $values { "literal" "a literal" } { "class" "a relocation class" } }
 | 
			
		||||
{ $description "Adds a refrence to a literal value to the current code offset." } ;
 | 
			
		||||
{ $description "Adds a reference to a literal value to the current code offset." } ;
 | 
			
		||||
 | 
			
		||||
HELP: rel-safepoint
 | 
			
		||||
{ $values { "class" "a relocation class" } }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -17,18 +17,19 @@ HELP: interval-constraint
 | 
			
		|||
{ $class-description "An interval constraint." } ;
 | 
			
		||||
 | 
			
		||||
HELP: literal-constraint
 | 
			
		||||
{ $class-description "A literal constraint" } ;
 | 
			
		||||
{ $class-description "A literal constraint." } ;
 | 
			
		||||
 | 
			
		||||
HELP: satisfied?
 | 
			
		||||
{ $values { "constraint" "a constraint" } { "?" boolean } }
 | 
			
		||||
{ $description "satisfied? is inaccurate. It's just used to prevent infinite loops so its only implemented for true-constraints and false-constraints." } ;
 | 
			
		||||
{ $description "The name " { $snippet "satisfied?" } " is imprecise. This word is used to prevent infinite loops, so it is only implemented for " { $link true-constraint } " and " { $link false-constraint } "." } ;
 | 
			
		||||
 | 
			
		||||
ARTICLE: "compiler.tree.propagation.constraints" "Support for predicated value info"
 | 
			
		||||
"A constraint is a statement about a value."
 | 
			
		||||
"A constraint is a statement about a value. The " { $vocab-link "compiler.tree.propagation.constraints" } " vocabulary implements these constraints for propagation of values through the compilation process."
 | 
			
		||||
$nl
 | 
			
		||||
"Boolean constraints:"
 | 
			
		||||
{ $subsections true-constraint true-constraint }
 | 
			
		||||
{ $subsections true-constraint false-constraint }
 | 
			
		||||
"Utilities:"
 | 
			
		||||
{ $subsections t--> f--> } ;
 | 
			
		||||
 | 
			
		||||
ABOUT: "compiler.tree.propagation.constraints"
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -31,7 +31,7 @@ HELP: n-bit-version-of
 | 
			
		|||
ARTICLE: "cpu.x86.assembler.operands" "CPU x86 registers and memory operands"
 | 
			
		||||
"Indirect operand constructors for various addressing formats:"
 | 
			
		||||
{ $subsections [] [RIP+] [+] [++] [+*2+] [+*4+] [+*8+] }
 | 
			
		||||
"Register correspondances:"
 | 
			
		||||
"Register correspondences:"
 | 
			
		||||
{ $subsections
 | 
			
		||||
  8-bit-version-of
 | 
			
		||||
  16-bit-version-of
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,6 +1,6 @@
 | 
			
		|||
! Copyright (C) 2008 Doug Coleman.
 | 
			
		||||
! See http://factorcode.org/license.txt for BSD license.
 | 
			
		||||
USING: accessors kernel continuations fry words ;
 | 
			
		||||
USING: continuations kernel ;
 | 
			
		||||
IN: db.errors
 | 
			
		||||
 | 
			
		||||
ERROR: db-error ;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -46,11 +46,10 @@ M: retryable execute-statement* ( statement type -- )
 | 
			
		|||
: sql-props ( class -- columns table )
 | 
			
		||||
    [ db-columns ] [ db-table-name ] bi ;
 | 
			
		||||
 | 
			
		||||
: query-make ( class quot -- statements )
 | 
			
		||||
: query-make ( ..a class quot: ( ..a columns table -- ..b ) -- ..b statements )
 | 
			
		||||
    ! query, input, outputs, secondary queries
 | 
			
		||||
    over db-table-name "table-name" set
 | 
			
		||||
    [ sql-props ] dip
 | 
			
		||||
    [ 0 sql-counter rot with-variable ] curry
 | 
			
		||||
    '[ 0 sql-counter [ dup "table-name" set @ ] with-variable ]
 | 
			
		||||
    { "" { } { } { } } nmake
 | 
			
		||||
    [ <simple-statement> maybe-make-retryable ] dip
 | 
			
		||||
    [ [ 1array ] dip append ] unless-empty ; inline
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -256,7 +256,7 @@ M: sqlite-db-connection persistent-table ( -- assoc )
 | 
			
		|||
    " interpolate>string ;
 | 
			
		||||
 | 
			
		||||
: can-be-null? ( -- ? )
 | 
			
		||||
    "sql-spec" get modifiers>> [ +not-null+ = ] any? not ;
 | 
			
		||||
    "sql-spec" get modifiers>> [ +not-null+ = ] none? ;
 | 
			
		||||
 | 
			
		||||
: delete-cascade? ( -- ? )
 | 
			
		||||
    "sql-spec" get modifiers>> { +on-delete+ +cascade+ } swap subseq? ;
 | 
			
		||||
| 
						 | 
				
			
			@ -281,18 +281,15 @@ M: sqlite-db-connection persistent-table ( -- assoc )
 | 
			
		|||
: create-db-triggers ( sql-specs -- )
 | 
			
		||||
    [ modifiers>> [ +foreign-id+ = ] deep-any? ] filter
 | 
			
		||||
    [
 | 
			
		||||
        [ class>> db-table-name "db-table" set ]
 | 
			
		||||
        [ "sql-spec" set ]
 | 
			
		||||
        [ column-name>> "table-id" set ]
 | 
			
		||||
        [ ] tri
 | 
			
		||||
        modifiers>> [ [ +foreign-id+ = ] deep-any? ] filter
 | 
			
		||||
        [
 | 
			
		||||
            [ "sql-spec" set ]
 | 
			
		||||
            [ column-name>> "table-id" set ]
 | 
			
		||||
            [ ] tri
 | 
			
		||||
            modifiers>> [ [ +foreign-id+ = ] deep-any? ] filter
 | 
			
		||||
            [
 | 
			
		||||
                [ second db-table-name "foreign-table-name" set ]
 | 
			
		||||
                [ third "foreign-table-id" set ] bi
 | 
			
		||||
                create-sqlite-triggers
 | 
			
		||||
            ] each
 | 
			
		||||
        ] bi
 | 
			
		||||
            [ second db-table-name "foreign-table-name" set ]
 | 
			
		||||
            [ third "foreign-table-id" set ] bi
 | 
			
		||||
            create-sqlite-triggers
 | 
			
		||||
        ] each
 | 
			
		||||
    ] each ;
 | 
			
		||||
 | 
			
		||||
: sqlite-create-table ( sql-specs class-name -- )
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -40,13 +40,11 @@ GENERIC: eval-generator ( singleton -- object )
 | 
			
		|||
 | 
			
		||||
: query-modify-tuple ( tuple statement -- )
 | 
			
		||||
    [ query-results [ sql-row-typed ] with-disposal ] keep
 | 
			
		||||
    out-params>> rot [
 | 
			
		||||
        [ slot-name>> ] dip set-slot-named
 | 
			
		||||
    ] curry 2each ;
 | 
			
		||||
    out-params>> rot '[ slot-name>> _ set-slot-named ] 2each ;
 | 
			
		||||
 | 
			
		||||
: with-disposals ( object quotation -- )
 | 
			
		||||
    over sequence? [
 | 
			
		||||
        [ with-disposal ] curry each
 | 
			
		||||
        over '[ _ dispose-each ] [ ] cleanup
 | 
			
		||||
    ] [
 | 
			
		||||
        with-disposal
 | 
			
		||||
    ] if ; inline
 | 
			
		||||
| 
						 | 
				
			
			@ -73,7 +71,8 @@ PRIVATE>
 | 
			
		|||
 | 
			
		||||
! High level
 | 
			
		||||
ERROR: no-slots-named class seq ;
 | 
			
		||||
: check-columns ( class columns -- )
 | 
			
		||||
 | 
			
		||||
: check-columns ( columns class -- )
 | 
			
		||||
    [ nip ] [
 | 
			
		||||
        [ keys ]
 | 
			
		||||
        [ all-slots [ name>> ] map ] bi* diff
 | 
			
		||||
| 
						 | 
				
			
			@ -155,5 +154,4 @@ ERROR: no-defined-persistent object ;
 | 
			
		|||
 | 
			
		||||
: count-tuples ( query/tuple -- n )
 | 
			
		||||
    >query [ tuple>> ] [ <count-statement> ] bi do-count
 | 
			
		||||
    dup length 1 =
 | 
			
		||||
    [ first first string>number ] [ [ first string>number ] map ] if ;
 | 
			
		||||
    [ first string>number ] map dup length 1 = [ first ] when ;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -32,8 +32,7 @@ SYMBOLS: +autoincrement+ +serial+ +unique+ +default+ +null+ +not-null+
 | 
			
		|||
SYMBOL: IGNORE
 | 
			
		||||
 | 
			
		||||
: filter-ignores ( tuple specs -- specs' )
 | 
			
		||||
    [ <mirror> [ nip IGNORE = ] assoc-filter keys ] dip
 | 
			
		||||
    [ slot-name>> swap member? ] with reject ;
 | 
			
		||||
    [ <mirror> ] dip [ slot-name>> of IGNORE = ] with reject ;
 | 
			
		||||
 | 
			
		||||
ERROR: not-persistent class ;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -77,14 +77,12 @@ CONSTANT: doc-start { 0 0 }
 | 
			
		|||
: (doc-range) ( from to line# document -- slice )
 | 
			
		||||
    [ start/end-on-line ] 2keep doc-line <slice> ;
 | 
			
		||||
 | 
			
		||||
: text+loc ( lines loc -- loc )
 | 
			
		||||
    over [
 | 
			
		||||
        over length 1 = [
 | 
			
		||||
            nip first2
 | 
			
		||||
        ] [
 | 
			
		||||
            first swap length 1 - + 0
 | 
			
		||||
        ] if
 | 
			
		||||
    ] dip last length + 2array ;
 | 
			
		||||
:: text+loc ( lines loc -- loc )
 | 
			
		||||
    lines length 1 = [
 | 
			
		||||
        loc first2
 | 
			
		||||
    ] [
 | 
			
		||||
        loc first lines length 1 - + 0
 | 
			
		||||
    ] if lines last length + 2array ;
 | 
			
		||||
 | 
			
		||||
: prepend-first ( str seq -- )
 | 
			
		||||
    0 swap [ append ] change-nth ;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -11,6 +11,6 @@ ARTICLE: "editors.vim" "Vim support"
 | 
			
		|||
    { "If you want to start vim in an extra terminal, use something like this:" { $code "{ \"urxvt\" \"-e\" \"vim\" } vim-path set-global" } "Replace " { $snippet "urxvt" } " by your terminal of choice." }
 | 
			
		||||
}
 | 
			
		||||
$nl
 | 
			
		||||
"You may also wish to install Vim support files to enable syntax hilighting and other features. These are in the " { $link resource-path } " in " { $snippet "misc/vim" } "."
 | 
			
		||||
"You may also wish to install Vim support files to enable syntax highlighting and other features. These are in the " { $link resource-path } " in " { $snippet "misc/vim" } "."
 | 
			
		||||
{ $see-also "editor" }
 | 
			
		||||
;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1 +1,2 @@
 | 
			
		|||
John Benediktsson
 | 
			
		||||
Cat Stevens
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,203 @@
 | 
			
		|||
! Copyright (C) 2018 Cat Stevens
 | 
			
		||||
USING: arrays assocs help.markup help.syntax kernel math multiline
 | 
			
		||||
sequences strings ;
 | 
			
		||||
IN: english
 | 
			
		||||
 | 
			
		||||
<PRIVATE
 | 
			
		||||
: $0-plurality ( children -- )
 | 
			
		||||
    drop {
 | 
			
		||||
        "Due to the unique way in which the English language is structured, the number "
 | 
			
		||||
        { $snippet "0" }
 | 
			
		||||
        " is considered plural; "
 | 
			
		||||
        { $snippet "1" }
 | 
			
		||||
        " is the only singular quantity."
 | 
			
		||||
    } print-element ;
 | 
			
		||||
 | 
			
		||||
: $keep-case ( children -- )
 | 
			
		||||
    drop
 | 
			
		||||
    "This word attempts to preserve the letter case style of the input." print-element ;
 | 
			
		||||
PRIVATE>
 | 
			
		||||
 | 
			
		||||
ABOUT: "english"
 | 
			
		||||
 | 
			
		||||
ARTICLE: "english" "English natural language transformations"
 | 
			
		||||
 | 
			
		||||
"The " { $vocab-link "english" } " vocabulary implements a few simple ways of interacting with text in the English language, for improving generated text."
 | 
			
		||||
$nl
 | 
			
		||||
"Plural and singular forms:"
 | 
			
		||||
{ $subsections plural? pluralize ?pluralize count-of-things singular? singularize }
 | 
			
		||||
 | 
			
		||||
"Toy grammatical words:"
 | 
			
		||||
{ $subsections a/an ?plural-article a10n comma-list }
 | 
			
		||||
 | 
			
		||||
"An example application:"
 | 
			
		||||
{ $subsections or-markup-example $or-markup-example } ;
 | 
			
		||||
 | 
			
		||||
{ pluralize ?pluralize plural? count-of-things singularize singular? } related-words
 | 
			
		||||
{ a/an ?plural-article a10n comma-list $or-markup-example or-markup-example } related-words
 | 
			
		||||
 | 
			
		||||
HELP: singularize
 | 
			
		||||
{ $values { "word" string } { "singular" string } }
 | 
			
		||||
{ $description "Determine the singular form of the input English word. If the input is already singular, it is returned unchanged." }
 | 
			
		||||
{ $notes $keep-case  }
 | 
			
		||||
{ $examples
 | 
			
		||||
    { $example
 | 
			
		||||
        "USING: english io ;"
 | 
			
		||||
        "\"CATS\" singularize print"
 | 
			
		||||
        "CAT"
 | 
			
		||||
    }
 | 
			
		||||
    { $example
 | 
			
		||||
        "USING: english io ;"
 | 
			
		||||
        "\"Octopi\" singularize print"
 | 
			
		||||
        "Octopus"
 | 
			
		||||
    }
 | 
			
		||||
} ;
 | 
			
		||||
 | 
			
		||||
HELP: singular?
 | 
			
		||||
{ $values { "word" string } { "?" boolean } }
 | 
			
		||||
{ $description "Attempt to determine whether the word is in singular form." }
 | 
			
		||||
{ $examples
 | 
			
		||||
    { $example
 | 
			
		||||
        "USING: english prettyprint ;"
 | 
			
		||||
        "\"octopi\" plural? ."
 | 
			
		||||
        "t"
 | 
			
		||||
    }
 | 
			
		||||
} ;
 | 
			
		||||
 | 
			
		||||
HELP: pluralize
 | 
			
		||||
{ $values { "word" string } { "plural" string } }
 | 
			
		||||
{ $description "Determine the plural form of the input English word. If the input is already plural, it " { $emphasis "might" } " be returned unchanged." }
 | 
			
		||||
{ $notes { $list { "If the input is already in plural form, an invaid construct such as " { $emphasis "friendses" } " may be generated. This is difficult to avoid due to the unpredictable structure of the English language." } $keep-case } }
 | 
			
		||||
{ $examples
 | 
			
		||||
    { $example
 | 
			
		||||
        "USING: english io ;"
 | 
			
		||||
        "\"CAT\" pluralize print"
 | 
			
		||||
        "CATS"
 | 
			
		||||
    }
 | 
			
		||||
    { $example
 | 
			
		||||
        "USING: english io ;"
 | 
			
		||||
        "\"Octopus\" pluralize print"
 | 
			
		||||
        "Octopi"
 | 
			
		||||
    }
 | 
			
		||||
} ;
 | 
			
		||||
 | 
			
		||||
HELP: plural?
 | 
			
		||||
{ $values { "word" string } { "?" boolean } }
 | 
			
		||||
{ $description "Attempt to determine whether the word is in plural form." }
 | 
			
		||||
{ $examples
 | 
			
		||||
    { $example
 | 
			
		||||
        "USING: english prettyprint ;"
 | 
			
		||||
        "\"octopus\" singular? ."
 | 
			
		||||
        "t"
 | 
			
		||||
    }
 | 
			
		||||
} ;
 | 
			
		||||
 | 
			
		||||
HELP: count-of-things
 | 
			
		||||
{ $values { "count" number } { "word" string } { "str" string } }
 | 
			
		||||
{ $description "Transform a quantity and a word into a construct consisting of the quantity, and the correct plural or singular form of the word. " { $snippet "word" } " is expected to be in singular form." }
 | 
			
		||||
{ $notes { $list $keep-case $0-plurality } }
 | 
			
		||||
{ $examples
 | 
			
		||||
    { $example
 | 
			
		||||
        "USING: english io ;"
 | 
			
		||||
        "10 \"baby\" count-of-things print"
 | 
			
		||||
        "10 babies"
 | 
			
		||||
    }
 | 
			
		||||
    { $example
 | 
			
		||||
        "USING: english io ;"
 | 
			
		||||
        "2.5 \"FISH\" count-of-things print"
 | 
			
		||||
        "2.5 FISH"
 | 
			
		||||
    }
 | 
			
		||||
} ;
 | 
			
		||||
 | 
			
		||||
HELP: ?pluralize
 | 
			
		||||
{ $values { "count" number } { "singular" string } { "singluar/plural" string } }
 | 
			
		||||
{ $description "A simpler variant of " { $link count-of-things } " which omits its input value from the output. As with " { $link count-of-things } ", " { $snippet "word" } " is expected to be in singular form." }
 | 
			
		||||
{ $notes { $list $keep-case $0-plurality } }
 | 
			
		||||
{ $examples
 | 
			
		||||
    { $example
 | 
			
		||||
        "USING: english io ;"
 | 
			
		||||
        "14 \"criterion\" ?pluralize print"
 | 
			
		||||
        "criteria"
 | 
			
		||||
    }
 | 
			
		||||
} ;
 | 
			
		||||
 | 
			
		||||
HELP: a10n
 | 
			
		||||
{ $values { "word" string } { "numeronym" string } }
 | 
			
		||||
{ $description "Abbreviates a word of more than three characters, by replacing the inner part of the word with the number of omitted letters. The result is an abbreviation (called a " { $emphasis "numeronym" } ") which is pronounced like the original word." }
 | 
			
		||||
{ $notes { $list
 | 
			
		||||
    $keep-case
 | 
			
		||||
    "When the input is too short, it is returned unchanged."
 | 
			
		||||
    { "The name of this word is " { $snippet "abbreviation" } ", abbreviated by its own strategy." }
 | 
			
		||||
    { "This style of abbreviation originated with " { $snippet "i18n" } " (the word " { $emphasis "internationalization" } ") in the 1980s." }
 | 
			
		||||
} }
 | 
			
		||||
{ $examples
 | 
			
		||||
    { $example
 | 
			
		||||
        "USING: english io ;"
 | 
			
		||||
        "\"dup\" a10n print"
 | 
			
		||||
        "dup"
 | 
			
		||||
    }
 | 
			
		||||
    { $example
 | 
			
		||||
        "USING: english io ;"
 | 
			
		||||
        "\"abbreviationalism\" a10n print"
 | 
			
		||||
        "a15m"
 | 
			
		||||
    }
 | 
			
		||||
} ;
 | 
			
		||||
 | 
			
		||||
HELP: a/an
 | 
			
		||||
{ $values { "word" string } { "article" { $or-markup-example "\"a\"" "\"an\"" } } }
 | 
			
		||||
{ $description "Gives the proper indefinite singular article (" { $emphasis "a" } " or " { $emphasis "an" } ") for the word. For words which begin with a vowel sound, " { $emphasis "an" } " is used, whereas " { $emphasis "a" } " is used for words which begin with a consonant sound." }
 | 
			
		||||
{ $notes "The output does not contain the input. The output of this word is always a singular article, regardless of the plurality of the input." }
 | 
			
		||||
{ $examples
 | 
			
		||||
    { $example
 | 
			
		||||
        "USING: english kernel combinators sequences io ;"
 | 
			
		||||
        "\"object\" [ a/an ] keep \" \" glue print"
 | 
			
		||||
        "an object"
 | 
			
		||||
    }
 | 
			
		||||
} ;
 | 
			
		||||
 | 
			
		||||
HELP: ?plural-article
 | 
			
		||||
{ $values { "word" string } { "article" { $or-markup-example "\"a\"" "\"an\"" "\"the\"" } } }
 | 
			
		||||
{ $description "Output the proper article given the plurality and first letter of the input. Unlike " { $link a/an } " this word handles plural inputs by outputting the definite " { $emphasis "\"the\"" } ". If the input is singular as determined by " { $link singular? } " this word operates like " { $link a/an } "." }
 | 
			
		||||
{ $notes { $list "English lacks a plural indefinite article, so the plural definite is used here instead." $keep-case $0-plurality } }
 | 
			
		||||
{ $examples
 | 
			
		||||
    { $example
 | 
			
		||||
        "USING: english sequences kernel io ;"
 | 
			
		||||
        "\"cat\" [ ?plural-article ] keep \" \" glue print"
 | 
			
		||||
        "a cat"
 | 
			
		||||
    }
 | 
			
		||||
    { $example
 | 
			
		||||
        "USING: english sequences kernel io ;"
 | 
			
		||||
        "\"cats\" [ ?plural-article ] keep \" \" glue print"
 | 
			
		||||
        "the cats"
 | 
			
		||||
    }
 | 
			
		||||
} ;
 | 
			
		||||
 | 
			
		||||
HELP: comma-list
 | 
			
		||||
{ $values
 | 
			
		||||
    { "parts" sequence }
 | 
			
		||||
    { "conjunction" string }
 | 
			
		||||
    { "clause-seq" sequence }
 | 
			
		||||
}
 | 
			
		||||
{ $description "Generate a comma-separated list of things, emplacing " { $snippet "conjunction" } " before the last " { $snippet "part" } " if there are two or more elements in " { $snippet "parts" } "." }
 | 
			
		||||
{ $notes $keep-case }
 | 
			
		||||
{ $examples
 | 
			
		||||
    { $example
 | 
			
		||||
        "USING: english io sequences ;"
 | 
			
		||||
        "{ \"a cat\" \"a peach\" \"an object\" } \"or\" comma-list concat print"
 | 
			
		||||
        "a cat, a peach, or an object"
 | 
			
		||||
    }
 | 
			
		||||
} ;
 | 
			
		||||
 | 
			
		||||
HELP: or-markup-example
 | 
			
		||||
{ $values { "markup" "a sequence of markup elements" } { "classes" "a sequence of words" } }
 | 
			
		||||
{ $description "Used to implement " { $link $or-markup-example } " and demonstrate " { $link comma-list } "." }
 | 
			
		||||
{ $examples { "See the examples in " { $link $or-markup-example } "." } } ;
 | 
			
		||||
 | 
			
		||||
HELP: $or-markup-example
 | 
			
		||||
{ $values { "classes" "a sequence of words" } }
 | 
			
		||||
{ $description "An example to demonstrate a use-case for " { $link comma-list } ". Works like the " { $link $or } " and " { $link ($instance) } " words from " { $vocab-link "help.markup" } "." }
 | 
			
		||||
{ $examples
 | 
			
		||||
    { $markup-example
 | 
			
		||||
        { $or-markup-example "cat" "octopus" "animal" object pair number array string sequence assoc "bird" } print-element
 | 
			
		||||
    }
 | 
			
		||||
} ;
 | 
			
		||||
| 
						 | 
				
			
			@ -1,16 +1,130 @@
 | 
			
		|||
USE: tools.test
 | 
			
		||||
USING: accessors arrays assocs english.private help.markup kernel math
 | 
			
		||||
math.parser sequences strings tools.test ;
 | 
			
		||||
IN: english
 | 
			
		||||
 | 
			
		||||
{ "record" } [ "records" singularize ] unit-test
 | 
			
		||||
{ "FOOT" } [ "FEET" singularize ] unit-test
 | 
			
		||||
{ "record" }  [ "records" singularize ] unit-test
 | 
			
		||||
{ "record" }  [ "record" singularize ] unit-test
 | 
			
		||||
{ "baby" }    [ "babies" singularize ] unit-test
 | 
			
		||||
{ "baby" }    [ "baby" singularize ] unit-test
 | 
			
		||||
{ "FOOT" }    [ "FEET" singularize ] unit-test
 | 
			
		||||
{ "FOOT" }    [ "FOOT" singularize ] unit-test
 | 
			
		||||
{ "cactus" }  [ "cacti" singularize ] unit-test
 | 
			
		||||
{ "cactus" }  [ "cactuses" singularize ] unit-test
 | 
			
		||||
{ "octopus" } [ "octopi" singularize ] unit-test
 | 
			
		||||
{ "octopus" } [ "octopuses" singularize ] unit-test
 | 
			
		||||
 | 
			
		||||
{ "friends" } [ "friend" pluralize ] unit-test
 | 
			
		||||
{ "friendlies" } [ "friendly" pluralize ] unit-test
 | 
			
		||||
{ "friendlies" } [ "friendlies" pluralize ] unit-test
 | 
			
		||||
{ "enemies" } [ "enemy" pluralize ] unit-test
 | 
			
		||||
{ "Sheep" } [ "Sheep" pluralize ] unit-test
 | 
			
		||||
{ "Sheep" }   [ "Sheep" pluralize ] unit-test
 | 
			
		||||
{ "Moose" }   [ "Moose" pluralize ] unit-test
 | 
			
		||||
{ "cacti" }   [ "cactus" pluralize ] unit-test
 | 
			
		||||
{ "octopi" }  [ "octopus" pluralize ] unit-test
 | 
			
		||||
 | 
			
		||||
{ "a10n" } [ "abbreviation" a10n ] unit-test
 | 
			
		||||
{ "i18n" } [ "internationalization" a10n ] unit-test
 | 
			
		||||
{ t } [ "singular" singular? ] unit-test
 | 
			
		||||
{ f } [ "singulars" singular? ] unit-test
 | 
			
		||||
{ t } [ "singularity" singular? ] unit-test
 | 
			
		||||
{ f } [ "singularities" singular? ] unit-test
 | 
			
		||||
{ t } [ "thesis" singular? ] unit-test
 | 
			
		||||
{ f } [ "theses" singular? ] unit-test
 | 
			
		||||
{ t } [ "goose" singular? ] unit-test
 | 
			
		||||
{ t } [ "baby" singular? ] unit-test
 | 
			
		||||
{ t } [ "bird" singular? ] unit-test
 | 
			
		||||
{ f } [ "birds" singular? ] unit-test
 | 
			
		||||
{ t } [ "octopus" singular? ] unit-test
 | 
			
		||||
{ f } [ "octopi" singular? ] unit-test
 | 
			
		||||
 | 
			
		||||
{ t } [ "geese" plural? ] unit-test
 | 
			
		||||
{ f } [ "goose" plural? ] unit-test
 | 
			
		||||
{ t } [ "birds" plural? ] unit-test
 | 
			
		||||
{ f } [ "bird" plural? ] unit-test
 | 
			
		||||
{ t } [ "cats" plural? ] unit-test
 | 
			
		||||
{ f } [ "cat" plural? ] unit-test
 | 
			
		||||
{ t } [ "babies" plural? ] unit-test
 | 
			
		||||
{ f } [ "baby" plural? ] unit-test
 | 
			
		||||
{ t } [ "octopi" plural? ] unit-test
 | 
			
		||||
{ f } [ "octopus" plural? ] unit-test
 | 
			
		||||
 | 
			
		||||
! they are both singular and plural
 | 
			
		||||
{ t } [ "moose" plural? ] unit-test
 | 
			
		||||
{ t } [ "moose" singular? ] unit-test
 | 
			
		||||
{ t } [ "sheep" plural? ] unit-test
 | 
			
		||||
{ t } [ "sheep" singular? ] unit-test
 | 
			
		||||
 | 
			
		||||
{ "3 babies" } [ 3 "baby" count-of-things ] unit-test
 | 
			
		||||
{ "1 pipe" } [ 1 "pipe" count-of-things ] unit-test
 | 
			
		||||
{ "0 pipes" } [ 0 "pipe" count-of-things ] unit-test
 | 
			
		||||
{ "2.5 cats" } [ 2.5 "cat" count-of-things ] unit-test
 | 
			
		||||
{ "2.5 CATS" } [ 2.5 "CAT" count-of-things ] unit-test
 | 
			
		||||
{ "1 pipe" }   [ 1 "pipe" count-of-things ] unit-test
 | 
			
		||||
{ "0 pipes" }  [ 0 "pipe" count-of-things ] unit-test
 | 
			
		||||
 | 
			
		||||
{ "babies" } [ 3 "baby" ?pluralize ] unit-test
 | 
			
		||||
{ "BABIES" } [ 3 "BABY" ?pluralize ] unit-test
 | 
			
		||||
{ "cats" } [ 2.5 "cat"  ?pluralize ] unit-test
 | 
			
		||||
{ "Cats" } [ 2.5 "Cat"  ?pluralize ] unit-test
 | 
			
		||||
{ "pipe" } [ 1 "pipe"   ?pluralize ] unit-test
 | 
			
		||||
{ "pipes" } [ 0 "pipe"  ?pluralize ] unit-test
 | 
			
		||||
 | 
			
		||||
{ "a5s" }     [ "address" a10n ] unit-test
 | 
			
		||||
{ "a10n" }    [ "abbreviation" a10n ] unit-test
 | 
			
		||||
{ "l10n" }    [ "localization" a10n ] unit-test
 | 
			
		||||
{ "i18n" }    [ "internationalization" a10n ] unit-test
 | 
			
		||||
{ "f28n" }    [ "floccinauccinihilipilification" a10n ] unit-test
 | 
			
		||||
{ "p43s" }    [ "pneumonoultramicroscopicsilicovolcanoconiosis" a10n ] unit-test
 | 
			
		||||
{ "a10000c" } [ 10000 CHAR: b <string> "a" "c" surround a10n ] unit-test
 | 
			
		||||
 | 
			
		||||
{ "an" } [ "object" a/an ] unit-test
 | 
			
		||||
{ "an" } [ "elephant" a/an ] unit-test
 | 
			
		||||
{ "a" }  [ "moose" a/an ] unit-test
 | 
			
		||||
{ "a" }  [ "xylophone" a/an ] unit-test
 | 
			
		||||
 | 
			
		||||
{ "the" } [ "objects" ?plural-article ] unit-test
 | 
			
		||||
{ "an" }  [ "object" ?plural-article ] unit-test
 | 
			
		||||
{ "the" } [ "elephants" ?plural-article ] unit-test
 | 
			
		||||
{ "an" }  [ "elephant" ?plural-article ] unit-test
 | 
			
		||||
{ "a" }   [ "moose" ?plural-article ] unit-test
 | 
			
		||||
{ "a" }   [ "goose" ?plural-article ] unit-test
 | 
			
		||||
{ "the" } [ "geese" ?plural-article ] unit-test
 | 
			
		||||
{ "a" }   [ "sheep" ?plural-article ] unit-test
 | 
			
		||||
 | 
			
		||||
{ { } } [ { } "or" comma-list ] unit-test
 | 
			
		||||
 | 
			
		||||
{ { "a" } } [ { "a" } "or" comma-list ] unit-test
 | 
			
		||||
 | 
			
		||||
{ { "a" " or " "b" } }
 | 
			
		||||
[ { "a" "b" } "or" comma-list ] unit-test
 | 
			
		||||
 | 
			
		||||
{ { "a" ", " "b" ", or " "c" } }
 | 
			
		||||
[ { "a" "b" "c" } "or" comma-list ] unit-test
 | 
			
		||||
 | 
			
		||||
{ { "a" ", " "b" ", " "x" ", and " "c" } }
 | 
			
		||||
[ { "a" "b" "x" "c" } "and" comma-list ] unit-test
 | 
			
		||||
 | 
			
		||||
{ {
 | 
			
		||||
    { "an " { $link object } } ", "
 | 
			
		||||
    { "a " { $link pair } } ", "
 | 
			
		||||
    { "a " { $link number } } ", "
 | 
			
		||||
    { "an " { $link array } } ", "
 | 
			
		||||
    { "a " { $link string } } ", "
 | 
			
		||||
    { "a " { $link sequence } } ", or "
 | 
			
		||||
    { "an " { $link assoc } }
 | 
			
		||||
} } [
 | 
			
		||||
    { object pair number array string sequence assoc }
 | 
			
		||||
    or-markup-example
 | 
			
		||||
    ! an object, a pair, a number, an array, a string, a sequence, or an assoc
 | 
			
		||||
] unit-test
 | 
			
		||||
 | 
			
		||||
{ {
 | 
			
		||||
    { "an " { $link object } }
 | 
			
		||||
} } [ { object } or-markup-example ] unit-test
 | 
			
		||||
 | 
			
		||||
{ {
 | 
			
		||||
    { "an " { $link object } } " or "
 | 
			
		||||
    { "a " { $link pair } }
 | 
			
		||||
} } [ { object pair } or-markup-example ] unit-test
 | 
			
		||||
 | 
			
		||||
{ {
 | 
			
		||||
    { "an " { $link object } } ", "
 | 
			
		||||
    { "a " { $link pair } } ", or "
 | 
			
		||||
    { "a " { $snippet "thing" } }
 | 
			
		||||
} } [ { object pair "thing" } or-markup-example ] unit-test
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,8 @@
 | 
			
		|||
! Copyright (C) 2015 John Benediktsson
 | 
			
		||||
! Copyright (C) 2015, 2018 John Benediktsson
 | 
			
		||||
! See http://factorcode.org/license.txt for BSD license
 | 
			
		||||
USING: assocs assocs.extras combinators formatting kernel literals
 | 
			
		||||
locals math math.parser sequences splitting unicode ;
 | 
			
		||||
USING: accessors arrays assocs assocs.extras combinators
 | 
			
		||||
help.markup kernel literals locals math math.parser sequences
 | 
			
		||||
sequences.extras splitting unicode words ;
 | 
			
		||||
 | 
			
		||||
IN: english
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -14,6 +15,7 @@ CONSTANT: singular-to-plural H{
 | 
			
		|||
    ! us -> i
 | 
			
		||||
    { "alumnus" "alumni" }
 | 
			
		||||
    { "cactus" "cacti" }
 | 
			
		||||
    { "octopus" "octopi" }
 | 
			
		||||
    { "focus" "foci" }
 | 
			
		||||
    { "fungus" "fungi" }
 | 
			
		||||
    { "nucleus" "nuclei" }
 | 
			
		||||
| 
						 | 
				
			
			@ -141,11 +143,44 @@ PRIVATE>
 | 
			
		|||
        [ "s" append ]
 | 
			
		||||
    } cond match-case ;
 | 
			
		||||
 | 
			
		||||
: count-of-things ( count word -- str )
 | 
			
		||||
    over 1 = [ pluralize ] unless "%d %s" sprintf ;
 | 
			
		||||
: singular? ( word -- ? )
 | 
			
		||||
    [ singularize ] [ = ] bi ;
 | 
			
		||||
 | 
			
		||||
: a10n ( str -- str' )
 | 
			
		||||
: plural? ( word -- ? )
 | 
			
		||||
    [ singularize pluralize ] [ = ] bi ;
 | 
			
		||||
 | 
			
		||||
: ?pluralize ( count singular -- singular/plural )
 | 
			
		||||
    swap 1 = [ pluralize ] unless ;
 | 
			
		||||
 | 
			
		||||
: count-of-things ( count word -- str )
 | 
			
		||||
    dupd ?pluralize [ number>string ] dip " " glue ;
 | 
			
		||||
 | 
			
		||||
: a10n ( word -- numeronym )
 | 
			
		||||
    dup length 3 > [
 | 
			
		||||
        [ 1 head ] [ length 2 - number>string ] [ 1 tail* ] tri
 | 
			
		||||
        3append
 | 
			
		||||
    ] when ;
 | 
			
		||||
 | 
			
		||||
: a/an ( word -- article )
 | 
			
		||||
    [ first ] [ length ] bi 1 = "afhilmnorsx" "aeiou" ?
 | 
			
		||||
    member? "an" "a" ? ;
 | 
			
		||||
 | 
			
		||||
: ?plural-article ( word -- article )
 | 
			
		||||
    dup singular? [ a/an ] [ drop "the" ] if ;
 | 
			
		||||
 | 
			
		||||
: comma-list ( parts conjunction  -- clause-seq )
 | 
			
		||||
    [ ", " interleaved ] dip over length dup 3 >= [
 | 
			
		||||
        [ 3 > ", " " " ? " " surround ] [ 2 - pick set-nth ] bi
 | 
			
		||||
    ] [ 2drop ] if ;
 | 
			
		||||
 | 
			
		||||
: or-markup-example ( classes -- markup )
 | 
			
		||||
    [
 | 
			
		||||
        dup word? [
 | 
			
		||||
            [ name>> ] keep \ $link
 | 
			
		||||
        ] [
 | 
			
		||||
            dup \ $snippet
 | 
			
		||||
        ] if swap 2array [ a/an " " append ] dip 2array
 | 
			
		||||
    ] map "or" comma-list ;
 | 
			
		||||
 | 
			
		||||
: $or-markup-example ( classes -- )
 | 
			
		||||
    or-markup-example print-element ;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,4 +0,0 @@
 | 
			
		|||
! Copyright (C) 2009 Slava Pestov.
 | 
			
		||||
! See http://factorcode.org/license.txt for BSD license.
 | 
			
		||||
USING: tools.test fonts ;
 | 
			
		||||
IN: fonts.tests
 | 
			
		||||
| 
						 | 
				
			
			@ -21,11 +21,6 @@ TUPLE: heap { data vector } ;
 | 
			
		|||
: <heap> ( class -- heap )
 | 
			
		||||
    V{ } clone swap boa ; inline
 | 
			
		||||
 | 
			
		||||
ERROR: not-a-heap object ;
 | 
			
		||||
 | 
			
		||||
: check-heap ( heap -- heap )
 | 
			
		||||
    dup heap? [ not-a-heap ] unless ; inline
 | 
			
		||||
 | 
			
		||||
TUPLE: entry value key heap index ;
 | 
			
		||||
 | 
			
		||||
: <entry> ( value key heap -- entry )
 | 
			
		||||
| 
						 | 
				
			
			@ -148,7 +143,6 @@ M: heap heap-pop
 | 
			
		|||
    [ data-first >entry< ] [ heap-pop* ] bi ;
 | 
			
		||||
 | 
			
		||||
: slurp-heap ( ... heap quot: ( ... value key -- ... ) -- ... )
 | 
			
		||||
    [ check-heap ] dip
 | 
			
		||||
    [ drop '[ _ heap-empty? ] ]
 | 
			
		||||
    [ '[ _ heap-pop @ ] until ] 2bi ; inline
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,4 +1,4 @@
 | 
			
		|||
USING: accessors io.sockets.secure http.client http.client.private http
 | 
			
		||||
USING: accessors http http.client http.client.private
 | 
			
		||||
io.streams.string kernel namespaces sequences tools.test urls ;
 | 
			
		||||
IN: http.client.tests
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -197,9 +197,9 @@ $nl
 | 
			
		|||
 | 
			
		||||
ARTICLE: "http.proxy-variables" "HTTP(S) proxy variables"
 | 
			
		||||
{ $heading "Proxy Variables" }
 | 
			
		||||
"The http and https proxies can be configured per request, or with Factor's dynamic variables, or with the system's environnement variables (searched from left to right) :"
 | 
			
		||||
"The http and https proxies can be configured per request, or with Factor's dynamic variables, or with the system's environment variables (searched from left to right) :"
 | 
			
		||||
{ $table
 | 
			
		||||
{ "variable" "Factor dynamic" "environnement #1" "environnement #2" }
 | 
			
		||||
{ "variable" "Factor dynamic" "environment #1" "environment #2" }
 | 
			
		||||
{ "HTTP" { $snippet "\"http.proxy\"" } "http_proxy" "HTTP_PROXY" }
 | 
			
		||||
{ "HTTPS" { $snippet "\"https.proxy\"" } "https_proxy" "HTTPS_PROXY" }
 | 
			
		||||
{ "no proxy" { $snippet "\"no_proxy\"" } "no_proxy" "NO_PROXY" }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,6 @@
 | 
			
		|||
USING: accessors assocs continuations http http.server
 | 
			
		||||
http.server.requests io.encodings.utf8 io.encodings.binary io.streams.string
 | 
			
		||||
kernel math peg sequences tools.test urls ;
 | 
			
		||||
IN: http.server.tests
 | 
			
		||||
http.server.requests io.encodings.utf8 io.encodings.binary
 | 
			
		||||
io.streams.string kernel math peg sequences tools.test urls ;
 | 
			
		||||
 | 
			
		||||
{ t } [ [ \ + first ] [ <500> ] recover response? ] unit-test
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,4 +1,3 @@
 | 
			
		|||
USING: http.server.static tools.test xml.writer ;
 | 
			
		||||
IN: http.server.static.tests
 | 
			
		||||
 | 
			
		||||
{ } [ "resource:basis" directory>html write-xml ] unit-test
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,6 +1,5 @@
 | 
			
		|||
USING: kernel tools.test math namespaces prettyprint
 | 
			
		||||
sequences inspector io.streams.string ;
 | 
			
		||||
IN: inspector.tests
 | 
			
		||||
USING: kernel tools.test math namespaces prettyprint sequences
 | 
			
		||||
inspector io.streams.string ;
 | 
			
		||||
 | 
			
		||||
[ 1 2 3 ] describe
 | 
			
		||||
f describe
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,4 +1,3 @@
 | 
			
		|||
IN: io.crlf.tests
 | 
			
		||||
USING: io.crlf tools.test io.streams.string io ;
 | 
			
		||||
 | 
			
		||||
{ "Hello, world." } [ "Hello, world." [ read-crlf ] with-string-reader ] unit-test
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,6 +1,5 @@
 | 
			
		|||
USING: io.directories io.directories.hierarchy kernel
 | 
			
		||||
sequences tools.test ;
 | 
			
		||||
IN: io.directories.hierarchy.tests
 | 
			
		||||
 | 
			
		||||
{ { "classes/tuple/tuple.factor" } } [
 | 
			
		||||
    "resource:core" [
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -74,7 +74,7 @@ PRIVATE>
 | 
			
		|||
 | 
			
		||||
: find-file ( path quot: ( ... name -- ... ? ) -- path/f )
 | 
			
		||||
    [ bfs? <directory-iterator> ] dip
 | 
			
		||||
    [ keep and ] curry iterate-directory ; inline
 | 
			
		||||
    '[ _ keep and ] iterate-directory ; inline
 | 
			
		||||
 | 
			
		||||
: find-files ( path quot: ( ... name -- ... ? ) -- paths )
 | 
			
		||||
    selector [ each-file ] dip ; inline
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,6 @@
 | 
			
		|||
USING: io.encodings.string io.encodings.8-bit
 | 
			
		||||
io.encodings.8-bit.private tools.test strings arrays
 | 
			
		||||
io.encodings.8-bit.latin1 io.encodings.8-bit.windows-1252 ;
 | 
			
		||||
IN: io.encodings.8-bit.tests
 | 
			
		||||
 | 
			
		||||
{ B{ char: f char: o char: o } } [ "foo" latin1 encode ] unit-test
 | 
			
		||||
[ { 256 } >string latin1 encode ] must-fail
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,6 @@
 | 
			
		|||
! Copyright (C) 2009 Daniel Ehrenberg
 | 
			
		||||
! See http://factorcode.org/license.txt for BSD license.
 | 
			
		||||
USING: io.encodings.gb18030 io.encodings.string strings tools.test arrays ;
 | 
			
		||||
IN: io.encodings.gb18030.tests
 | 
			
		||||
 | 
			
		||||
{ "hello" } [ "hello" gb18030 encode >string ] unit-test
 | 
			
		||||
{ "hello" } [ "hello" gb18030 decode ] unit-test
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,6 +1,5 @@
 | 
			
		|||
USING: io.encodings.strict io.encodings.ascii tools.test
 | 
			
		||||
arrays io.encodings.string ;
 | 
			
		||||
IN: io.encodings.strict.tests
 | 
			
		||||
 | 
			
		||||
{ { 0xfffd } } [ { 128 } ascii decode >array ] unit-test
 | 
			
		||||
[ { 128 } ascii strict decode ] must-fail
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2,7 +2,6 @@
 | 
			
		|||
! See http://factorcode.org/license.txt for BSD license.
 | 
			
		||||
USING: strings io.encodings.utf8 io.encodings.utf16
 | 
			
		||||
io.encodings.string tools.test io.encodings.binary ;
 | 
			
		||||
IN: io.encodings.string.tests
 | 
			
		||||
 | 
			
		||||
{ "hello" } [ "hello" utf8 decode ] unit-test
 | 
			
		||||
{ B{ 0 1 22 255 } } [ B{ 0 1 22 255 } binary decode ] unit-test
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -3,7 +3,6 @@
 | 
			
		|||
USING: kernel tools.test io.encodings.utf32 arrays sbufs
 | 
			
		||||
io.streams.byte-array sequences io.encodings io strings
 | 
			
		||||
io.encodings.string alien.c-types alien.strings accessors classes ;
 | 
			
		||||
IN: io.encodings.utf32.tests
 | 
			
		||||
 | 
			
		||||
{ { char: x } } [ B{ 0 0 0 char: x } utf32be decode >array ] unit-test
 | 
			
		||||
{ { 0x1D11E } } [ B{ 0 1 0xD1 0x1E } utf32be decode >array ] unit-test
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,6 +1,5 @@
 | 
			
		|||
USING: io.encodings.string io.encodings.utf7 kernel sequences strings
 | 
			
		||||
tools.test ;
 | 
			
		||||
IN: io.encodings.utf7.tests
 | 
			
		||||
 | 
			
		||||
{
 | 
			
		||||
    {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,6 @@
 | 
			
		|||
USING: io.files.info io.encodings.utf8 io.files
 | 
			
		||||
io.directories kernel io.pathnames accessors tools.test
 | 
			
		||||
sequences io.files.temp ;
 | 
			
		||||
IN: io.files.info.tests
 | 
			
		||||
 | 
			
		||||
{ "hi41" } [
 | 
			
		||||
    [
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,6 @@
 | 
			
		|||
! Copyright (C) 2015 Doug Coleman.
 | 
			
		||||
! See http://factorcode.org/license.txt for BSD license.
 | 
			
		||||
USING: tools.test io.files.info.unix.linux ;
 | 
			
		||||
IN: io.files.info.unix.linux.tests
 | 
			
		||||
 | 
			
		||||
[ "/media/erg/4TB D" ]
 | 
			
		||||
[ "/media/erg/4TB\\040D" decode-mount-point ] unit-test
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,6 +1,5 @@
 | 
			
		|||
! Copyright (C) 2009 Doug Coleman.
 | 
			
		||||
! See http://factorcode.org/license.txt for BSD license.
 | 
			
		||||
USING: tools.test io.files.info.windows system kernel ;
 | 
			
		||||
IN: io.files.info.windows.tests
 | 
			
		||||
 | 
			
		||||
[ ] [ vm-path file-times 3drop ] unit-test
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2,7 +2,6 @@ USING: accessors continuations io.directories
 | 
			
		|||
io.directories.hierarchy io.encodings.ascii io.files
 | 
			
		||||
io.files.info io.files.temp io.files.unique io.pathnames kernel
 | 
			
		||||
namespaces sequences strings tools.test ;
 | 
			
		||||
IN: io.files.unique.tests
 | 
			
		||||
 | 
			
		||||
{ 123 } [
 | 
			
		||||
    [
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4,7 +4,6 @@ USING: combinators continuations io.backend io.directories io.files
 | 
			
		|||
io.files.temp io.files.windows io.pathnames kernel kernel.private libc
 | 
			
		||||
literals memory sequences splitting tools.test windows.kernel32
 | 
			
		||||
io.files.unique destructors ;
 | 
			
		||||
IN: io.files.windows.tests
 | 
			
		||||
 | 
			
		||||
[ f ] [ "\\foo" absolute-path? ] unit-test
 | 
			
		||||
[ t ] [ "\\\\?\\c:\\foo" absolute-path? ] unit-test
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,9 +1,7 @@
 | 
			
		|||
USING: io io.pipes io.streams.string io.encodings.utf8
 | 
			
		||||
io.encodings.binary io.streams.duplex io.encodings io.timeouts
 | 
			
		||||
namespaces continuations tools.test kernel calendar destructors
 | 
			
		||||
accessors debugger math sequences threads
 | 
			
		||||
concurrency.count-downs fry ;
 | 
			
		||||
IN: io.pipes.tests
 | 
			
		||||
USING: accessors calendar concurrency.count-downs continuations
 | 
			
		||||
destructors fry io io.encodings io.encodings.binary
 | 
			
		||||
io.encodings.utf8 io.pipes io.streams.duplex io.streams.string
 | 
			
		||||
io.timeouts kernel math namespaces threads tools.test ;
 | 
			
		||||
 | 
			
		||||
{ "Hello" } [
 | 
			
		||||
    utf8 <pipe> [
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,6 +1,5 @@
 | 
			
		|||
USING: tools.test io.pipes io.pipes.unix io.encodings.utf8
 | 
			
		||||
io.encodings io namespaces sequences ;
 | 
			
		||||
IN: io.pipes.unix.tests
 | 
			
		||||
 | 
			
		||||
[ { 0 0 } ] [ { "ls" "grep ." } run-pipeline ] unit-test
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -34,7 +34,7 @@ HELP: secure-config
 | 
			
		|||
 | 
			
		||||
HELP: <secure-config>
 | 
			
		||||
{ $values { "config" secure-config } }
 | 
			
		||||
{ $description "Creates a new secure socket configration with default values." } ;
 | 
			
		||||
{ $description "Creates a new secure socket configuration with default values." } ;
 | 
			
		||||
 | 
			
		||||
ARTICLE: "ssl-key-file" "The key file and password"
 | 
			
		||||
"The " { $snippet "key-file" } " and " { $snippet "password" } " slots of a " { $link secure-config } " can be set to a private key file in PEM format. These slots are required for secure servers, and also for clients when client-side authentication is used." ;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,6 +1,5 @@
 | 
			
		|||
IN: io.sockets.secure.tests
 | 
			
		||||
USING: accessors io.sockets io.sockets.secure io.sockets.secure.debug
 | 
			
		||||
kernel system tools.test ;
 | 
			
		||||
USING: accessors io.sockets io.sockets.secure
 | 
			
		||||
io.sockets.secure.debug kernel system tools.test ;
 | 
			
		||||
 | 
			
		||||
{ "hello" 24 } [ "hello" 24 <inet> "hello" <secure> [ host>> ] [ port>> ] bi ] unit-test
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,6 @@
 | 
			
		|||
! Copyright (C) 2011 Doug Coleman.
 | 
			
		||||
! See http://factorcode.org/license.txt for BSD license.
 | 
			
		||||
USING: io.standard-paths io.standard-paths.macosx tools.test ;
 | 
			
		||||
IN: io.standard-paths.macosx.tests
 | 
			
		||||
 | 
			
		||||
{ "/System/Library/CoreServices/Finder.app" }
 | 
			
		||||
[ "com.apple.finder" find-native-bundle ] unit-test
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,4 +0,0 @@
 | 
			
		|||
! Copyright (C) 2011 Doug Coleman.
 | 
			
		||||
! See http://factorcode.org/license.txt for BSD license.
 | 
			
		||||
USING: tools.test io.standard-paths ;
 | 
			
		||||
IN: io.standard-paths.tests
 | 
			
		||||
| 
						 | 
				
			
			@ -1,7 +1,5 @@
 | 
			
		|||
 | 
			
		||||
USING: kernel sequences tools.test ;
 | 
			
		||||
 | 
			
		||||
IN: ip-parser
 | 
			
		||||
USING: ip-parser kernel sequences tools.test ;
 | 
			
		||||
 | 
			
		||||
{ "0.0.0.1" } [ "1" normalize-ipv4 ] unit-test
 | 
			
		||||
{ "1.0.0.2" } [ "1.2" normalize-ipv4 ] unit-test
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,6 @@
 | 
			
		|||
! Copyright (C) 2016 Doug Coleman.
 | 
			
		||||
! See http://factorcode.org/license.txt for BSD license.
 | 
			
		||||
USING: io.streams.string json.prettyprint json.reader tools.test ;
 | 
			
		||||
IN: json.prettyprint.tests
 | 
			
		||||
 | 
			
		||||
[
 | 
			
		||||
"{
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,6 +1,5 @@
 | 
			
		|||
USING: hashtables io.streams.string json json.reader
 | 
			
		||||
json.reader.private kernel literals math strings tools.test ;
 | 
			
		||||
IN: json.reader.tests
 | 
			
		||||
 | 
			
		||||
{ f } [ "false" json> ] unit-test
 | 
			
		||||
{ t } [ "true" json> ] unit-test
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2,7 +2,6 @@
 | 
			
		|||
! See http://factorcode.org/license.txt for BSD license.
 | 
			
		||||
USING: lcs lcs.diff2html kernel tools.test strings sequences
 | 
			
		||||
xml.writer ;
 | 
			
		||||
IN: lcs.diff2html.tests
 | 
			
		||||
 | 
			
		||||
{ } [
 | 
			
		||||
    "hello" "heyo" [ [ 1string ] { } map-as ] bi@
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,4 +1,3 @@
 | 
			
		|||
IN: libc.tests
 | 
			
		||||
USING: destructors kernel libc libc.private namespaces
 | 
			
		||||
tools.test ;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2,7 +2,6 @@
 | 
			
		|||
! See http://factorcode.org/license.txt for BSD license.
 | 
			
		||||
USING: accessors assocs kernel linked-assocs math sequences
 | 
			
		||||
tools.test ;
 | 
			
		||||
IN: linked-assocs.tests
 | 
			
		||||
 | 
			
		||||
{ { 1 2 3 } } [
 | 
			
		||||
    <linked-hash> 1 "b" pick set-at
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,6 +1,5 @@
 | 
			
		|||
USING: arrays kernel math math.combinatorics
 | 
			
		||||
math.combinatorics.private tools.test sequences ;
 | 
			
		||||
IN: math.combinatorics.tests
 | 
			
		||||
 | 
			
		||||
{ 1 } [ -1 factorial ] unit-test ! required by other math.combinatorics words
 | 
			
		||||
{ 1 } [ 0 factorial ] unit-test
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,5 +1,4 @@
 | 
			
		|||
USING: fry kernel sequences tools.test ;
 | 
			
		||||
IN: math.primes.erato.fast
 | 
			
		||||
USING: fry kernel math.primes.erato.fast sequences tools.test ;
 | 
			
		||||
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -11,7 +11,7 @@ IN: math.primes.erato.fast
 | 
			
		|||
 | 
			
		||||
CONSTANT: wheel-2-3-5-7 $[
 | 
			
		||||
    11 dup 210 + [a,b] [
 | 
			
		||||
        { 2 3 5 7 } [ divisor? ] with any? not
 | 
			
		||||
        { 2 3 5 7 } [ divisor? ] with none?
 | 
			
		||||
    ] B{ } filter-as differences
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,6 @@
 | 
			
		|||
! Copyright (C) 2009 Doug Coleman.
 | 
			
		||||
! See http://factorcode.org/license.txt for BSD license.
 | 
			
		||||
USING: tools.test math.primes.lucas-lehmer ;
 | 
			
		||||
IN: math.primes.lucas-lehmer.tests
 | 
			
		||||
 | 
			
		||||
{ t } [ 2 lucas-lehmer ] unit-test
 | 
			
		||||
{ t } [ 3 lucas-lehmer ] unit-test
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,5 +1,4 @@
 | 
			
		|||
USING: kernel math.primes.miller-rabin sequences tools.test ;
 | 
			
		||||
IN: math.primes.miller-rabin.tests
 | 
			
		||||
 | 
			
		||||
{ f } [ 473155932665450549999756893736999469773678960651272093993257221235459777950185377130233556540099119926369437865330559863 miller-rabin ] unit-test
 | 
			
		||||
{ t } [ 2 miller-rabin ] unit-test
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -18,9 +18,9 @@ IN: math.primes.miller-rabin
 | 
			
		|||
        ] [
 | 
			
		||||
            r <iota> [
 | 
			
		||||
                2^ s * a swap n ^mod n-1 =
 | 
			
		||||
            ] any? not
 | 
			
		||||
            ] none?
 | 
			
		||||
        ] if
 | 
			
		||||
    ] any? not ;
 | 
			
		||||
    ] none? ;
 | 
			
		||||
 | 
			
		||||
PRIVATE>
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,6 +1,5 @@
 | 
			
		|||
USING: arrays kernel math math.primes math.primes.miller-rabin
 | 
			
		||||
sequences tools.test ;
 | 
			
		||||
IN: math.primes.tests
 | 
			
		||||
 | 
			
		||||
{ 1237 } [ 1234 next-prime ] unit-test
 | 
			
		||||
{ f t } [ 1234 prime? 1237 prime? ] unit-test
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,6 @@
 | 
			
		|||
! Copyright (C) 2009 Doug Coleman.
 | 
			
		||||
! See http://factorcode.org/license.txt for BSD license.
 | 
			
		||||
USING: math.primes.safe math.primes.safe.private tools.test ;
 | 
			
		||||
IN: math.primes.safe.tests
 | 
			
		||||
 | 
			
		||||
{ 863 } [ 862 next-safe-prime ] unit-test
 | 
			
		||||
{ f } [ 862 safe-prime? ] unit-test
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,6 @@
 | 
			
		|||
USING: arrays assocs kernel math math.functions math.statistics sequences
 | 
			
		||||
math.order tools.test math.vectors ;
 | 
			
		||||
FROM: math.ranges => [a,b] ;
 | 
			
		||||
IN: math.statistics.tests
 | 
			
		||||
 | 
			
		||||
{ 3 } [ { 1 2 3 4 5 } 1 power-mean ] unit-test
 | 
			
		||||
{ t } [ { 1 2 3 4 5 } [ 2 power-mean ] [ quadratic-mean ] bi 1e-10 ~ ] unit-test
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -13,7 +13,7 @@ HELP: mime-type
 | 
			
		|||
{ $values
 | 
			
		||||
    { "filename" "a filename" }
 | 
			
		||||
    { "mime-type" "a MIME type string" } }
 | 
			
		||||
{ $description "Outputs the MIME type associtated with a path by parsing the path's file extension and looking it up in the table returned by " { $link mime-types } "." } ;
 | 
			
		||||
{ $description "Outputs the MIME type associated with a path by parsing the path's file extension and looking it up in the table returned by " { $link mime-types } "." } ;
 | 
			
		||||
 | 
			
		||||
HELP: mime-types
 | 
			
		||||
{ $values
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,4 +1,3 @@
 | 
			
		|||
IN: mime.types.tests
 | 
			
		||||
USING: mime.types tools.test ;
 | 
			
		||||
 | 
			
		||||
{ "application/postscript" } [ "foo.ps" mime-type ] unit-test
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,6 +1,5 @@
 | 
			
		|||
USING: arrays generic kernel math models namespaces sequences assocs
 | 
			
		||||
tools.test models.arrow accessors ;
 | 
			
		||||
IN: models.arrow.tests
 | 
			
		||||
 | 
			
		||||
3 <model> "x" set
 | 
			
		||||
"x" get [ 2 * ] <arrow> dup "z" set
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,4 +1,3 @@
 | 
			
		|||
IN: models.arrows.smart.tests
 | 
			
		||||
USING: models.arrow.smart tools.test accessors models math kernel ;
 | 
			
		||||
 | 
			
		||||
{ 7 } [ 3 <model> 4 <model> [ + ] <smart-arrow> [ activate-model ] [ value>> ] bi ] unit-test
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,6 +1,5 @@
 | 
			
		|||
USING: arrays generic kernel math models namespaces sequences assocs
 | 
			
		||||
tools.test models.mapping accessors make ;
 | 
			
		||||
IN: models.mapping.tests
 | 
			
		||||
 | 
			
		||||
! Test mapping
 | 
			
		||||
{ } [
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,52 @@
 | 
			
		|||
USING: help.markup help.syntax strings ;
 | 
			
		||||
IN: multiline
 | 
			
		||||
 | 
			
		||||
HELP: STRING:
 | 
			
		||||
{ $syntax "STRING: name\nfoo\n;" }
 | 
			
		||||
{ $description "Forms a multiline string literal, or 'here document' stored in the word called name. A semicolon is used to signify the end, and that semicolon must be on a line by itself, not preceded or followed by any whitespace. The string will have newlines in between lines but not at the end, unless there is a blank line before the semicolon." } ;
 | 
			
		||||
 | 
			
		||||
HELP: /*
 | 
			
		||||
{ $syntax "/* comment */" }
 | 
			
		||||
{ $description "Provides C-like comments that can span multiple lines. One caveat is that " { $snippet "/*" } " and " { $snippet "*/" } " are still tokens and must not appear in the comment text itself." }
 | 
			
		||||
{ $examples
 | 
			
		||||
    { $example "USING: multiline ;"
 | 
			
		||||
           "/* I think that I shall never see"
 | 
			
		||||
           "   A poem lovely as a tree. */"
 | 
			
		||||
            ""
 | 
			
		||||
    }
 | 
			
		||||
} ;
 | 
			
		||||
 | 
			
		||||
HELP: HEREDOC:
 | 
			
		||||
{ $syntax "HEREDOC: marker\n...text...\nmarker" }
 | 
			
		||||
{ $values { "marker" "a word (token)" } { "text" "arbitrary text" } { "value" string } }
 | 
			
		||||
{ $description "Returns a string delimited by an arbitrary user-defined token. This delimiter must be exactly the text beginning at the first non-blank character after " { $link POSTPONE: HEREDOC: } " until the end of the line containing " { $link POSTPONE: HEREDOC: } ". Text is captured until a line is found containing exactly this delimiter string." }
 | 
			
		||||
{ $warning "Whitespace is significant." }
 | 
			
		||||
{ $examples
 | 
			
		||||
    { $example "USING: multiline prettyprint ;"
 | 
			
		||||
               "HEREDOC: END\nx\nEND\n."
 | 
			
		||||
               "\"x\\n\""
 | 
			
		||||
    }
 | 
			
		||||
    { $example "USING: multiline prettyprint sequences ;"
 | 
			
		||||
               "2 5 HEREDOC: zap\nfoo\nbar\nzap\nsubseq ."
 | 
			
		||||
               "\"o\\nb\""
 | 
			
		||||
    }
 | 
			
		||||
} ;
 | 
			
		||||
 | 
			
		||||
HELP: parse-multiline-string
 | 
			
		||||
{ $values { "end-text" "a string delineating the end" } { "str" "the parsed string" } }
 | 
			
		||||
{ $description "Parses the input stream until the " { $snippet "end-text" } " is reached and returns the parsed text as a string." }
 | 
			
		||||
{ $notes "Used to implement " { $link POSTPONE: /* } "." } ;
 | 
			
		||||
 | 
			
		||||
ARTICLE: "multiline" "Multiline"
 | 
			
		||||
"Multiline strings:"
 | 
			
		||||
{ $subsections
 | 
			
		||||
    POSTPONE: STRING:
 | 
			
		||||
    POSTPONE: HEREDOC:
 | 
			
		||||
}
 | 
			
		||||
"Multiline comments:"
 | 
			
		||||
{ $subsections POSTPONE: /* }
 | 
			
		||||
"Writing new multiline parsing words:"
 | 
			
		||||
{ $subsections parse-multiline-string }
 | 
			
		||||
;
 | 
			
		||||
 | 
			
		||||
ABOUT: "multiline"
 | 
			
		||||
| 
						 | 
				
			
			@ -1,4 +1,3 @@
 | 
			
		|||
IN: nmake.tests
 | 
			
		||||
USING: nmake kernel tools.test ;
 | 
			
		||||
 | 
			
		||||
{ } [ [ ] { } nmake ] unit-test
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,5 +1,4 @@
 | 
			
		|||
USING: arrays continuations debugger io.streams.string peg tools.test ;
 | 
			
		||||
IN: peg.debugger.tests
 | 
			
		||||
 | 
			
		||||
{ "Peg parsing error at character position 0.\nExpected 'A' or 'B'\nGot 'xxxx'\n" } [
 | 
			
		||||
    [ "xxxx" "A" token "B" token 2array choice parse ] [ ] recover
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -425,7 +425,7 @@ M: ebnf-sequence build-locals ( code ast -- code )
 | 
			
		|||
    elements>> filter-hidden dup length 1 = [
 | 
			
		||||
        first build-locals
 | 
			
		||||
    ] [
 | 
			
		||||
        dup [ ebnf-var? ] any? not [
 | 
			
		||||
        dup [ ebnf-var? ] none? [
 | 
			
		||||
            drop
 | 
			
		||||
        ] [
 | 
			
		||||
            [
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,4 +1,3 @@
 | 
			
		|||
IN: porter-stemmer.tests
 | 
			
		||||
USING: arrays assocs io kernel porter-stemmer sequences
 | 
			
		||||
tools.test io.files io.encodings.utf8 ;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,6 @@
 | 
			
		|||
! Copyright (C) 2009 Doug Coleman.
 | 
			
		||||
! See http://factorcode.org/license.txt for BSD license.
 | 
			
		||||
USING: tools.test quoting ;
 | 
			
		||||
IN: quoting.tests
 | 
			
		||||
 | 
			
		||||
{ f } [ "" quoted? ] unit-test
 | 
			
		||||
{ t } [ "''" quoted? ] unit-test
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,5 +1,4 @@
 | 
			
		|||
USING: sorting.human tools.test sorting.slots sorting ;
 | 
			
		||||
IN: sorting.human.tests
 | 
			
		||||
 | 
			
		||||
{ { "x1y" "x2" "x10y" } }
 | 
			
		||||
[ { "x1y" "x10y" "x2" } { human<=> } sort-by ] unit-test
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,4 +1,5 @@
 | 
			
		|||
IN: sorting.insertion
 | 
			
		||||
USING: sorting.insertion sequences kernel tools.test ;
 | 
			
		||||
 | 
			
		||||
{ { { 1 1 } { 1 2 } { 2 0 } } } [ { { 2 0 } { 1 1 } { 1 2 } } dup [ first ] insertion-sort ] unit-test
 | 
			
		||||
{ { { 1 1 } { 1 2 } { 2 0 } } } [
 | 
			
		||||
    { { 2 0 } { 1 1 } { 1 2 } } dup [ first ] insertion-sort
 | 
			
		||||
] unit-test
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,4 +1,3 @@
 | 
			
		|||
IN: soundex.tests
 | 
			
		||||
USING: soundex tools.test ;
 | 
			
		||||
 | 
			
		||||
{ "S162" } [ "supercalifrag" soundex ] unit-test
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,5 +1,5 @@
 | 
			
		|||
IN: splitting.monotonic
 | 
			
		||||
USING: tools.test math arrays kernel sequences ;
 | 
			
		||||
USING: tools.test math arrays kernel sequences
 | 
			
		||||
splitting.monotonic ;
 | 
			
		||||
 | 
			
		||||
{ { } } [ { } [ < ] monotonic-split ] unit-test
 | 
			
		||||
{ { { 1 } } } [ { 1 } [ < ] monotonic-split ] unit-test
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,6 @@
 | 
			
		|||
! Copyright (C) 2009 Slava Pestov.
 | 
			
		||||
! See http://factorcode.org/license.txt for BSD license.
 | 
			
		||||
USING: tools.test strings.tables ;
 | 
			
		||||
IN: strings.tables.tests
 | 
			
		||||
 | 
			
		||||
{ { } } [ { } format-table ] unit-test
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,6 @@
 | 
			
		|||
! Copyright (C) 2008 Marc Fauconneau.
 | 
			
		||||
! See http://factorcode.org/license.txt for BSD license.
 | 
			
		||||
USING: tools.test suffix-arrays kernel namespaces sequences ;
 | 
			
		||||
IN: suffix-arrays.tests
 | 
			
		||||
 | 
			
		||||
! built from [ all-words 10 head [ name>> ] map ]
 | 
			
		||||
{ } [
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,6 +1,5 @@
 | 
			
		|||
USING: system-info.linux strings splitting sequences
 | 
			
		||||
tools.test kernel ;
 | 
			
		||||
IN: system-info.linux.tests
 | 
			
		||||
 | 
			
		||||
[ 6 ] [ uname length ] unit-test
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,6 +1,5 @@
 | 
			
		|||
USING: math math.order strings system-info.windows tools.test
 | 
			
		||||
system-info ;
 | 
			
		||||
IN: system-info.windows.tests
 | 
			
		||||
 | 
			
		||||
[ t ] [ cpus integer? ] unit-test
 | 
			
		||||
[ t ] [ username string? ] unit-test
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,6 @@
 | 
			
		|||
USING: timers timers.private calendar concurrency.count-downs
 | 
			
		||||
concurrency.promises fry kernel math math.order sequences
 | 
			
		||||
threads tools.test tools.time ;
 | 
			
		||||
IN: timers.tests
 | 
			
		||||
 | 
			
		||||
{ } [
 | 
			
		||||
    1 <count-down>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -71,7 +71,7 @@ SINGLETON: deprecation-observer
 | 
			
		|||
 | 
			
		||||
M: deprecation-observer definitions-changed
 | 
			
		||||
    drop filter-word-defs
 | 
			
		||||
    dup [ deprecated? ] any? not
 | 
			
		||||
    dup [ deprecated? ] none?
 | 
			
		||||
    [ [ check-deprecations ] each ]
 | 
			
		||||
    [ drop initialize-deprecation-notes ] if ;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2,7 +2,6 @@
 | 
			
		|||
! See http://factorcode.org/license.txt for BSD license.
 | 
			
		||||
USING: tools.test math kernel sets generic
 | 
			
		||||
ui.baseline-alignment ui.baseline-alignment.private ;
 | 
			
		||||
IN: ui.baseline-alignment.tests
 | 
			
		||||
 | 
			
		||||
! Test baseline calculations
 | 
			
		||||
{ 10 0 } [ 0 10 0 10 combine-metrics ] unit-test
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,4 +1,3 @@
 | 
			
		|||
IN: ui.gadgets.borders.tests
 | 
			
		||||
USING: accessors kernel math.rectangles namespaces tools.test
 | 
			
		||||
ui.gadgets ui.gadgets.borders ui.gadgets.borders.private
 | 
			
		||||
ui.gadgets.editors ;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,6 +1,5 @@
 | 
			
		|||
USING: accessors kernel models namespaces tools.test ui.gadgets
 | 
			
		||||
ui.gadgets.buttons ;
 | 
			
		||||
IN: ui.gadgets.buttons.tests
 | 
			
		||||
 | 
			
		||||
{ } [
 | 
			
		||||
    2 <model> {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,4 +1,3 @@
 | 
			
		|||
IN: ui.gadgets.canvas.tests
 | 
			
		||||
USING: ui.gadgets.canvas tools.test kernel ;
 | 
			
		||||
 | 
			
		||||
{ 1 0 } [ [ drop ] draw-canvas ] must-infer-as
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,4 +0,0 @@
 | 
			
		|||
! Copyright (C) 2009 Slava Pestov.
 | 
			
		||||
! See http://factorcode.org/license.txt for BSD license.
 | 
			
		||||
USING: tools.test ui.gadgets.debug ;
 | 
			
		||||
IN: ui.gadgets.debug.tests
 | 
			
		||||
| 
						 | 
				
			
			@ -3,7 +3,6 @@ tools.test kernel io io.streams.plain definitions namespaces
 | 
			
		|||
ui.gadgets ui.gadgets.grids prettyprint documents ui.gestures
 | 
			
		||||
ui.gadgets.debug models documents.elements ui.gadgets.scrollers
 | 
			
		||||
ui.gadgets.line-support sequences ;
 | 
			
		||||
IN: ui.gadgets.editors.tests
 | 
			
		||||
 | 
			
		||||
{ "foo bar" } [
 | 
			
		||||
    <editor> "editor" set
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,6 +1,5 @@
 | 
			
		|||
USING: accessors kernel namespaces tools.test ui.gadgets
 | 
			
		||||
ui.gadgets.frames ui.gadgets.grids ui.gadgets.labels ;
 | 
			
		||||
IN: ui.gadgets.frames.tests
 | 
			
		||||
 | 
			
		||||
{ } [ 3 3 <frame> { 1 1 } >>filled-cell layout ] unit-test
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,4 +1,3 @@
 | 
			
		|||
IN: ui.gadgets.glass.tests
 | 
			
		||||
USING: tools.test ui.gadgets.glass ui.gadgets.worlds ui.gadgets
 | 
			
		||||
math.rectangles namespaces accessors models sequences arrays ;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,6 +1,5 @@
 | 
			
		|||
USING: accessors colors.constants sequences tools.test
 | 
			
		||||
ui.gadgets ui.gadgets.labeled ;
 | 
			
		||||
IN: ui.gadgets.labeled.tests
 | 
			
		||||
 | 
			
		||||
{ t } [
 | 
			
		||||
    <gadget> "Hey" <labeled-gadget> content>> gadget?
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,5 +1,4 @@
 | 
			
		|||
USING: accessors tools.test ui.gadgets ui.gadgets.labels ;
 | 
			
		||||
IN: ui.gadgets.labels.tests
 | 
			
		||||
 | 
			
		||||
{ { 119 14 } } [
 | 
			
		||||
    <gadget> { 100 14 } >>dim
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -36,7 +36,7 @@ HELP: line-gadget
 | 
			
		|||
 | 
			
		||||
HELP: pref-viewport-dim*
 | 
			
		||||
{ $values { "gadget" line-gadget } { "dim" array } }
 | 
			
		||||
{ $description "Calculates the preferred viewport dimenstions of the line gadget." }
 | 
			
		||||
{ $description "Calculates the preferred viewport dimensions of the line gadget." }
 | 
			
		||||
{ $see-also pref-viewport-dim } ;
 | 
			
		||||
 | 
			
		||||
ARTICLE: "ui.gadgets.line-support" "Gadget line support"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2,7 +2,6 @@
 | 
			
		|||
! See http://factorcode.org/license.txt for BSD license.
 | 
			
		||||
USING: accessors arrays kernel tools.test ui.gadgets.editors
 | 
			
		||||
ui.gadgets.line-support ui.gadgets.line-support.private ui.text ;
 | 
			
		||||
IN: ui.gadgets.line-support.tests
 | 
			
		||||
 | 
			
		||||
! line-gadget-height
 | 
			
		||||
{ t } [
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
Some files were not shown because too many files have changed in this diff Show More
		Loading…
	
		Reference in New Issue